01-16 Sunday
01-15 Saturday Easy
费了好大劲才把这个简单题做出来;
关键在于等差数列的求和公式;
class Solution {
public int totalMoney(int n) {
int ans = 0;
final int mod = (n) / 7;
final int y = n % 7;
ans += (56 + 7 * (mod - 1)) * mod / 2;
if (y > 0) {
final int s = mod + 1;
ans += (s * 2 + (y - 1)) * y / 2;
}
return ans;
}
}
01-14 Friday
https://leetcode-cn.com/problems/find-k-pairs-with-smallest-sums/
查找和最小的 K 对数字
不会做,直接 cv,太累了~
01-13 Thursday
至少是其他数字两倍的最大数
这题目比较简单,求最大值和次大值就行了。
01-10 Monday Medium
https://leetcode-cn.com/problems/additive-number/
累加数,回溯;
如果是数组就简单了,可惜是字符串;
需要穷举前两个数字的所有可能性;
还有一个难点就是实现字符串数字的加法,防止数字的溢出问题。
01-11 Tuesday Hard
逃离大迷宫;
关键点在于判断 封锁的坐标是否隔离了起始点。
我人直接麻了。。
01-12 Wednesday Medium
递增的三元子序列;
贪心算法
今天的题目如果理解了不是特别的难;
先设定一个 序列起点值 first
预设 序列的中间值 mid
从第 2 个数字开始遍历,num
如果 num 比 mid 大,则满足条件的序列出现了,返回 true
如果 num 比 first 大,则 用 num 替换 mid,这样后续的数字更容易满足 > mid
如果 num 比 first 小,这里需要 思考下,💡 用 num 替换 first,如果后续 出现了 num’ > mid,则满足条件的序列出现了,只是不是这两个值,而是原来的 first - mid,加上 num;如果 后续出现了 新的 mid,相当于是 废弃了前面的序列,已经没用了。
if (nums.length < 3) {
return false;
}
int x = nums[0];
int y = Integer.MAX_VALUE;
for (int i = 1; i < nums.length; i++) {
int num = nums[i];
if (num > y) {
return true;
} else if (num > x) {
y = num;
} else {
x = num;
}
}
return false;