题目描述:
给定一个正整数,返回它在 Excel 表中相对应的列名称。
例如,
1
2
3
4
5
6
7
8
9 > 1 -> A
> 2 -> B
> 3 -> C
> ...
> 26 -> Z
> 27 -> AA
> 28 -> AB
> ...
>
示例 1:
1
2
3 > 输入: 1
> 输出: "A"
>
示例 2:
1
2
3 > 输入: 28
> 输出: "AB"
>
示例 3:
1
2
3 > 输入: 701
> 输出: "ZY"
>
吃饱好减肥
给定一个正整数,返回它在 Excel 表中相对应的列名称。
例如,
1
2
3
4
5
6
7
8
9 > 1 -> A
> 2 -> B
> 3 -> C
> ...
> 26 -> Z
> 27 -> AA
> 28 -> AB
> ...
>
示例 1:
1
2
3 > 输入: 1
> 输出: "A"
>
示例 2:
1
2
3 > 输入: 28
> 输出: "AB"
>
示例 3:
1
2
3 > 输入: 701
> 输出: "ZY"
>
给定一个已按照升序排列 的有序数组,找到两个数使得它们相加之和等于目标数。
函数应该返回这两个下标值 index1 和 index2,其中 index1 必须小于 index2。
说明:
- 返回的下标值(index1 和 index2)不是从零开始的。
- 你可以假设每个输入只对应唯一的答案,而且你不可以重复使用相同的元素。
示例:
1
2
3
4 > 输入: numbers = [2, 7, 11, 15], target = 9
> 输出: [1,2]
> 解释: 2 与 7 之和等于目标数 9 。因此 index1 = 1, index2 = 2 。
>
编写一个程序,找到两个单链表相交的起始节点。
如下面的两个链表:
在节点 c1 开始相交。
示例 1:
1
2
3
4 >输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3
>输出:Reference of the node with value = 8
>输入解释:相交节点的值为 8 (注意,如果两个列表相交则不能为 0)。从各自的表头开始算起,链表 A 为 [4,1,8,4,5],链表 B 为 [5,0,1,8,4,5]。在 A 中,相交节点前有 2 个节点;在 B 中,相交节点前有 3 个节点。
>
示例 2:
1
2
3
4 >输入:intersectVal = 2, listA = [0,9,1,2,4], listB = [3,2,4], skipA = 3, skipB = 1
>输出:Reference of the node with value = 2
>输入解释:相交节点的值为 2 (注意,如果两个列表相交则不能为 0)。从各自的表头开始算起,链表 A 为 [0,9,1,2,4],链表 B 为 [3,2,4]。在 A 中,相交节点前有 3 个节点;在 B 中,相交节点前有 1 个节点。
>
示例 3:
1
2
3
4
5 >输入:intersectVal = 0, listA = [2,6,4], listB = [1,5], skipA = 3, skipB = 2
>输出:null
>输入解释:从各自的表头开始算起,链表 A 为 [2,6,4],链表 B 为 [1,5]。由于这两个链表不相交,所以 intersectVal 必须为 0,而 skipA 和 skipB 可以是任意值。
>解释:这两个链表不相交,因此返回 null。
>
注意:
- 如果两个链表没有交点,返回
null
.- 在返回结果后,两个链表仍须保持原有的结构。
- 可假定整个链表结构中没有循环。
- 程序尽量满足 O(n) 时间复杂度,且仅用 O(1) 内存。
设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。
- push(x) – 将元素 x 推入栈中。
- pop() – 删除栈顶的元素。
- top() – 获取栈顶元素。
- getMin() – 检索栈中的最小元素。
示例:
1
2
3
4
5
6
7
8
9 > MinStack minStack = new MinStack();
> minStack.push(-2);
> minStack.push(0);
> minStack.push(-3);
> minStack.getMin(); --> 返回 -3.
> minStack.pop();
> minStack.top(); --> 返回 0.
> minStack.getMin(); --> 返回 -2.
>
给定一个链表,判断链表中是否有环。
为了表示给定链表中的环,我们使用整数
pos
来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果pos
是-1
,则在该链表中没有环。示例 1:
1
2
3
4 > 输入:head = [3,2,0,-4], pos = 1
> 输出:true
> 解释:链表中有一个环,其尾部连接到第二个节点。
>
示例 2:
1
2
3
4 > 输入:head = [1,2], pos = 0
> 输出:true
> 解释:链表中有一个环,其尾部连接到第一个节点。
>
示例 3:
1
2
3
4 > 输入:head = [1], pos = -1
> 输出:false
> 解释:链表中没有环。
>
进阶:
你能用 O(1)(即,常量)内存解决此问题吗?
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
说明:
你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?
示例 1:
1
2
3 > 输入: [2,2,1]
> 输出: 1
>
示例 2:
1
2
3 > 输入: [4,1,2,1,2]
> 输出: 4
>
给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
说明:本题中,我们将空字符串定义为有效的回文串。
示例 1:
1
2
3 > 输入: "A man, a plan, a canal: Panama"
> 输出: true
>
示例 2:
1
2
3 > 输入: "race a car"
> 输出: false
>
给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。
设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。
注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。
示例 1:
1
2
3
4
5 > 输入: [7,1,5,3,6,4]
> 输出: 7
> 解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 。
> 随后,在第 4 天(股票价格 = 3)的时候买入,在第 5 天(股票价格 = 6)的时候卖出, 这笔交易所能获得利润 = 6-3 = 3 。
>
示例 2:
1
2
3
4
5
6 > 输入: [1,2,3,4,5]
> 输出: 4
> 解释: 在第 1 天(股票价格 = 1)的时候买入,在第 5 天 (股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 。
> 注意你不能在第 1 天和第 2 天接连购买股票,之后再将它们卖出。
> 因为这样属于同时参与了多笔交易,你必须在再次购买前出售掉之前的股票。
>
示例 3:
1
2
3
4 > 输入: [7,6,4,3,1]
> 输出: 0
> 解释: 在这种情况下, 没有交易完成, 所以最大利润为 0。
>
给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。
如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润。
注意你不能在买入股票前卖出股票。
示例 1:
1
2
3
4
5 >输入: [7,1,5,3,6,4]
>输出: 5
>解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。
> 注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格。
>
示例 2:
1
2
3
4 >输入: [7,6,4,3,1]
>输出: 0
>解释: 在这种情况下, 没有交易完成, 所以最大利润为 0。
>
给定一个非负索引 k,其中 k ≤ 33,返回杨辉三角的第 k 行。
在杨辉三角中,每个数是它左上方和右上方的数的和。
示例:
1
2
3 > 输入: 3
> 输出: [1,3,3,1]
>
进阶:
你可以优化你的算法到 O(k) 空间复杂度吗?