leetcode1024题

这篇博客是作者关于LeetCode第1024题的解题心得,采用贪心算法寻找解决方案。首先通过寻找0来确定最大结束时间,然后更新fin并检查是否能跳到终点。若无法到达终点,则返回-1。作者还对比了此题与LeetCode第55题的相似之处,但指出1024题需要考虑片段计数的差异。

今天是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篇的第一篇题解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qlanBy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值