概述
今天是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篇的第一篇题解。
最后
以上就是矮小眼睛为你收集整理的leetcode1024题的全部内容,希望文章能够帮你解决leetcode1024题所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复