题目
输入一个链表,反转链表后,输出链表的所有元素。
解题思路
三个指针来记录位置,反转链表。
|
|
输入一个链表,反转链表后,输出链表的所有元素。
三个指针来记录位置,反转链表。
|
|
输入一个链表,输出该链表中倒数第k个结点。
解法一:
两趟遍历,第一趟记录链表的总长度n,第二趟跑n-k长度。
|
|
解法二:
利用快慢双指针, 当快指针到达k位置时,慢指针开始启动,一旦快指针到达终点(指向null)时,慢指针到达倒数k位置。
|
|
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
解法一:
时间复杂度高O(n^2),但是不占额外的内存空间
|
|
解法二:
时间复杂度和空间复杂度都为O(n)
两个数组分别储存奇数和偶数
|
|
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
举个例子:3的11次方
直接将3累乘11次肯定不是一个优解方案。
3的11次方可以写成3 ^(1101)
等价于 (3的1次方) (3的0次方) (3的4次方) (3 的8次方);
ret = (3) (1) (3 3 3 3) (3 3 3 3 3 3 3 3 )
|
|
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
解法一:
对于输入的n不做改变,使用flag = 1对n的每一位进行检查是否等于1
|
|
解法二:
每次循环检查n的末位,是否等于1
利用java的 >>>
逻辑右移或叫无符号右移运算符“>>>“只对位进行操作,没有算术含义,它用0填充左侧的空位。
|
|
我们可以用2 x 1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2 x 1的小矩形无重叠地覆盖一个2 x n的大矩形,总共有多少种方法?
找规律(斐波那契数列)
a. 当target <= 2时, 直接返回target
b. 当target == n时,分两种情况,如下图
|
|
一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
找规律(斐波那契数列的应用)
a. 假设第一次跳1阶,那么剩下的跳法为f(n-1)
b. 假设第一次跳2阶,那么剩下的跳法为f(n-2)
c. 结合a,b考虑来看,总跳法为f(n) = f(n-1) + f(n-2)
d. 并且当n <= 2时, 跳法为n
|
|
大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。
n<=39
斐波那契数列
[1, 1, 2, 3, 5, 8, 13, 21 , …]
|
|
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。
相当于求数组中最小的元素
输入的数组:非递减数组的旋转。
例如在数组[3, 4, 5, 1, 2]中, 我们要找的元素是1, 需要从两边往中间逼近,并且当hi-lo <= 1,lo就是最小值的位置(也是查找结束的条件),那么二分查找即可。
|
|