1、三除数
判断一个整数是否只有三个除数。遍历查看整数的除数个数。
具体代码参考:
https://github.com/wuli2496/OJ/blob/master/LeetCode/week252/5830%E4%B8%89%E9%99%A4%E6%95%B0.cpp
2、你可以工作的最大周数
给定n个项目,每个项目由对应的阶段任务组成。每周只能做一个任务,并且要求连续两周不能做同一个项目中的任务。问在违反规则的情况下,最多能工作多少周。
使用贪心算法,从有最多阶段任务的项目考虑,如果任务数小于其它项目的任务之和+1,则可以完成所有的项目。否则所花费周数为2*其化项目之和+1
具体代码参考:
3、收集足够苹果的最小花园周长
在一个二维平面内放置苹果,苹果坐标只能是整数,在放置n个苹果情况下,土地的最小周长。
在左上角为(-n,n),右下角为(n, -n)时
根据需要的苹果数计算最小的n即可。具体代码参考:
4、统计特殊子序列的数目
由正整数个0,紧接正整数个1,最后正整数个2组成的为特殊序列,求nums数组中满足条件的序列个数。
用f(i,j)表示数组num[0..i]中满足条件j的序列个数。
其中j=0表示由正整数个0组成的序列。
j=1表示由正整数个0,紧接着正整数个1组成的序列
j=2表示由正整数个0,紧接着正整数个1,最后正整数个2组成的序列
状态转移时
当nums[i]=0时,在nums[0..i-1]元素组成的类型为0的子序列后添加0,一种情况是在上一状态情况下直接追加这个0,另外一种情况是是前一状态的0用这个0来作替换,还有一种情况是这个0单独作为新的类型为0的子序列。所以其状态转移为
f(i,0)=f(i-1,0)+f(i-1,0)+1=2*f(i-1,0)+1,对于f(i,1)和f(i,2)保持不变
当nums[i]=1时,在nums[0..i-1]元素组成的类型为1的子序列后添加1,一种情况是在前一状态情况下直接追加这个1,另外一种情况是在前一状态的1用这个1来作替换,还有一种情况是在前一状态类型为0的基础上加上这个1。所以其状态转移为
f(i,1)=f(i-1,1)+f(i-1,1) +f(i-1,0)=2f(i-1,1)+f(i-1,0)
当nums[i]=2时,在nums[0..i-1]元素组成的类型为2的子序列后添加2,一种情况是在前一状态情况下直接追加这个2,另外一种情况是在前一状态的2用这个2来作替换,还有一种情况是在前一状态类型为1的基础上加上这个2。所以其状态转移为
f(i,2)=f(i-1,2)+f(i-1,2)+f(i-1,1)=2f(i-1,2)+f(i-1,1)