Leetcode每日随机2021/4/30

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

最近很难遇到做不出来的题了,有点没意思。。。
leetcode435
贪心,先按照右区间从小到大排个序,依次看能不能加入,只要当前左区间大于等于上一个的右区间就能加入,而且这个一定是最优解。
leetcode1754
贪心,显然谁的第一个字母大就加谁,如果相等,则看他们的后一个字母谁大,再相同就再看后一个……
所以写了一个方法判断两个字符串谁大。
leetcode1292
纯暴力居然也能过啊。

代码

leetcode435

class Solution {
    public int eraseOverlapIntervals(int[][] intervals) {
		Arrays.sort(intervals, (a, b) -> a[1] - b[1]);
		Stack<int[]> valid = new Stack<int[]>();
		valid.push(intervals[0]);
		for (int i = 1; i < intervals.length; i++) {
			if (intervals[i][0] >= valid.peek()[1]) {
				valid.push(intervals[i]);
			}
		}
		return intervals.length - valid.size();
	}
}

leetcode1754

class Solution {
    public String largestMerge(String word1, String word2) {
		StringBuilder sb = new StringBuilder();
		StringBuilder sb1 = new StringBuilder(word1);
		StringBuilder sb2 = new StringBuilder(word2);
		while (sb1.length() > 0 || sb2.length() > 0) {
			if (compare(sb1, sb2)) {
				sb.append(sb2.charAt(0));
				sb2.deleteCharAt(0);
			} else {
				sb.append(sb1.charAt(0));
				sb1.deleteCharAt(0);
			}
		}
		return sb.toString();
	}

	private boolean compare(StringBuilder sb1, StringBuilder sb2) {
		int idx = 0;
		while (idx < Math.min(sb1.length(), sb2.length())) {
			if (sb1.charAt(idx) < sb2.charAt(idx)) {
				return true;
			} else if (sb1.charAt(idx) > sb2.charAt(idx)) {
				return false;
			} else {
				idx++;
			}
		}
		if (sb1.length() <= sb2.length()) {
			return true;
		} else {
			return false;
		}
	}
}

leetcode1292

class Solution {
    public int maxSideLength(int[][] mat, int threshold) {
		int maxLen = mat.length > mat[0].length ? mat.length : mat[0].length;
		int len = 1;
		while (len <= maxLen) {
			int minSum = Integer.MAX_VALUE;
			for (int i = 0; i + len <= mat.length; i++) {
				for (int j = 0; j + len <= mat[0].length; j++) {
					int squareSum = squareSum(mat, i, j, len, threshold);
					minSum = squareSum < minSum ? squareSum : minSum;
				}
			}
			if (minSum > threshold) {
				break;
			} else if (minSum == threshold) {
				return len;
			} else {
				len++;
			}
		}
		return len - 1;
	}

	private int squareSum(int[][] mat, int row, int col, int len, int threshold) {
		int sum = 0;
		for (int i = 0; i < len; i++) {
			for (int j = 0; j < len; j++) {
				sum += mat[row + i][col + j];
				if (sum > threshold) {
					return Integer.MAX_VALUE;
				}
			}
		}
		return sum;
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值