输入一个链表,输出该链表中倒数第k个结点。
快慢指针,快指针先走k
步。
1 | /* |
输入一个链表,输出该链表中倒数第k个结点。
快慢指针,快指针先走k
步。
1 | /* |
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
a
,再以从偶数开始,继续找到奇数b
,将区间[a, b)
内的偶数右移1
位,将奇数b
移至a
原来的位置上。循环。1 | class Solution { |
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
保证base和exponent不同时为0
考虑快速幂
1 | class Solution { |
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
令f(n)为n
中1
的个数。若n=0,则在n-1
中,n
中最右边的1
被置为0
,而该1
的左侧的1
保持不变,故
f(n)=f((n−1)&n)+1
1 | class Solution { |
我们可以用2×1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2×1的小矩形无重叠地覆盖一个2×n的大矩形,总共有多少种方法?
令2×n的大矩形可以用dp[n]
个小矩形覆盖,而2×n的大矩形有2×(n−1)的大矩形和一个小矩形,以及2×(n−2)的大矩形和2个小矩形覆盖,共2种情况,故
dp[n]=dp[n−1]+dp[n−2]
类比斐波那契数列和跳台阶,有令
A=[1110]
有
[dp[n+1]0dp[n]0]=[dp[n]0dp[n−1]0]×A
而
[dp[2]0dp[1]0]=[2010]
故
[dp[n+1]0dp[n]0]=[2010]×An−1=[2010]×A⌊2n−1⌋×A(n−1)%2
1 | class Solution { |
一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
令跳若干步跳上第n
级台阶有dp[n]
种跳法,则
dp[n]=i=1∑n−1dp[i]=i=1∑n−2dp[i]+dp[n−1]
而
dp[n−1]=i=1∑n−2dp[i]
故
dp[n]=2×dp[n]
而dp[1]=1
,故
dp[n]=2n−1
考虑位运算,代码如下:
1 | class Solution { |