我是靠谱客的博主 矮小眼睛,最近开发中收集的这篇文章主要介绍leetcode1024题,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

今天是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题所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(61)

评论列表共有 0 条评论

立即
投稿
返回
顶部