1.坏了的计算器(medium)
题目解析
算法原理
代码
class Solution {
public int brokenCalc(int startValue, int target) {
// 正难则反 + 贪⼼
int ret = 0;
while (target > startValue) {
if (target % 2 == 0)
target /= 2;
else
target += 1;
ret++;
}
return ret + startValue - target;
}
}
2.合并区间(medium)
题目解析
算法原理
代码
class Solution {
public int[][] merge(int[][] intervals) {
// 1. 按照左端点排序
Arrays.sort(intervals, (v1, v2) -> {
return v1[0] - v2[0];
});
// 2. 合并区间 - 求并集
int left = intervals[0][0], right = intervals[0][1];
List<int[]> ret = new ArrayList<>();
for (int i = 1; i < intervals.length; i++) {
int a = intervals[i][0], b = intervals[i][1];
if (a <= right) // 有重叠部分
{
// 合并 - 求并集
right = Math.max(right, b);
} else // 不能合并
{
ret.add(new int[] { left, right });
left = a;
right = b;
}
}
// 别忘了最后⼀个区间
ret.add(new int[] { left, right });
return ret.toArray(new int[0][]);
}
}