1678. 设计 Goal 解析器
return command.replace("()", "o").replace("(al)", "al");
888. 公平的糖果交换
766. 托普利茨矩阵
只需判断:前行中除最后一个元素外剩余的元素完全等于后行中除第一个元素外剩余的元素。
for(int i = 0; i <= r - 2; i++) {
for(int j = 0; j <= c - 2; j++) {
if(matrix[i][j] != matrix[i + 1][j + 1]) return false;
}
}
746. 使用最小花费爬楼梯
因为一次可以跳两步;
那么到达同一步,可以有两种走法
int[] ans = new int[cost.length + 1];
ans[0] = ans[1] = 0;
for(int i = 2; i <= cost.length; i++) {
ans[i] = Math.min(ans[i - 1] + cost[i - 1], ans[i - 2] + cost[i - 2]);
}
return ans[cost.length];
729. 我的日程安排表 I
for(int i = 0; i < list.size(); i++) {
int[] cur = list.get(i);
if(!(end <= cur[0] || start >= cur[1])) return false;左闭右开,要不冲突,只要end在前或者start在后即可
}
list.add(new int[]{start, end});
return true;
724. 寻找数组的中心下标
思路:左求和*2+中心索引值 = 总和
int leftSum = 0;
for(int i = 0; i < nums.length; i++) {
if(leftSum * 2 + nums[i] == sum) {
return i;
}
leftSum += nums[i];
}
719. 找出第 K 小的数对距离
int n = nums.length, left = 0, right = nums[n - 1] - nums[0];差值的范围
while(left <= right) {
int mid = (left + right) / 2;
int cnt = 0;
for(int i = 0, j = 0; j < n; j++) {
while(nums[j] - nums[i] > mid) {数目
i++;
}
cnt += j - i;求其间数目
}
if(cnt >= k) {
right = mid - 1;
}else {
left = mid + 1;
}
}
return left;