今天是1024,leetcode上的每日一题是1024,leetcode有心了。
下面是我第一次提交的代码:(Java)
public int videoStitching(int[][] clips, int T) {// 1024
int fin = 0;
int tmp = 0;
int ans = 0;
while (fin < T) {
for (int i = 0; i < clips.length; i++) {
if (clips[i][0] <= fin) {
tmp = Math.max(clips[i][1], tmp);
}
}
if (tmp == fin) {
return -1;
}
fin = tmp;
ans++;
}
return ans;
}
思路是贪心算法。
- 先找0,找到满足条件的所有片段中结束时间最大的。
- 再更新fin,找到满足开始时间小于等于fin的所有片段中结束时间最大。
- 如果结束时间大于T,返回结果。
- 如果还没到达终点,所有片段都派不上用场了,就return -1,标志是fin没有更新。
看了官方题解,说和55题有点像。于是去做了一下55题。
public boolean canJump(int[] nums) {//55
int pos=-1;
for(int i=0;i<nums.length-1;i++) {
if(nums[i]==0) {
pos=i;
int can=0;
for(int j=0;j<pos;j++) {
if(j+nums[j]>pos) {
can=1;
}
}
if(can==0) {
return false;
}
}
}
return true;
}
依葫芦画瓢。区别在于片段的结束时间需要自己算。
做完之后我又想了想,发现这道题还可以这么做:
public boolean canJump(int[] nums) {//55
int pos=-1;
for(int i=0;i<nums.length-1;i++) {
if(nums[i]==0) {
pos=i;
int can=0;
for(int j=0;j<pos;j++) {
if(j+nums[j]>pos) {
can=1;
}
}
if(can==0) {
return false;
}
}
}
return true;
}
思路是看数组中有没有0,如果没有0,一定可以跳到最后,不能跳到最后的,都是因为卡死在0上面;如果有0,有可能可以跳到最后,要看前面的数能不能跨过它。
55题中的数组中有0,对应到1024题就是没有以这位开始的片段。但1024还要输出片段数,所以不适合。
这篇博客是作者关于LeetCode第1024题的解题心得,采用贪心算法寻找解决方案。首先通过寻找0来确定最大结束时间,然后更新fin并检查是否能跳到终点。若无法到达终点,则返回-1。作者还对比了此题与LeetCode第55题的相似之处,但指出1024题需要考虑片段计数的差异。

737

被折叠的 条评论
为什么被折叠?



