技术干货(四)「LeetCode」51 - 60题详解( 三 )
提示:
- intervals[i][0] <= intervals[i][1]
public int[][] merge(int[][] nums) {int len = nums.length;if(len < 2) return nums;// 按照左端点排序Arrays.sort(nums, (o1, o2)->(o1[0] - o2[0]));// 结果集 , 每次比较之后 , 加入一个进结果集List res = new ArrayList<>();// 初始化先加入第一个res.add(nums[0]);for(int i = 1; i < len; i ++){// 后一个int[] curr = nums[i];// 前一个int[] peek = res.get(res.size() - 1);// 前一个的右端点 > 后一个的左端点 -> 没有交叉 直接加入if(curr[0] > peek[1]) res.add(curr);else{// 否则直接改变前一个的右端点为两者的最大值即可peek[1] = Math.max(curr[1], peek[1]);}}// list -> arrayreturn res.toArray(new int[res.size()][]);}
57. 插入区间给出一个无重叠的, 按照区间起始端点排序的区间列表 。在列表中插入一个新的区间 , 你需要确保列表中的区间仍然有序且不重叠(如果有必要的话 , 可以合并区间) 。
示例 1:
输入:intervals = [[1,3],[6,9]], newInterval = [2,5]输出:[[1,5],[6,9]]
示例 2:输入:intervals = [[1,2],[3,5],[6,7],[8,10],[12,16]], newInterval = [4,8]输出:[[1,2],[3,10],[12,16]]解释:这是因为新的区间 [4,8] 与 [3,5],[6,7],[8,10] 重叠 。
注意:输入类型已在 2019 年 4 月 15 日更改 。 请重置为默认代码定义以获取新的方法签名 。public int[][] insert(int[][] nums, int[] newNum) {int newStart = newNum[0], newEnd = newNum[1];int idx = 0, n = nums.length;LinkedList res = new LinkedList<>();// 将左端点小于newNums左端点的加入reswhile(idx < nint[] temp = new int[2];// res为空或者 没有交点[最后一个右端点 < newNum的左端点]if (res.isEmpty() || res.getLast()[1] < newStart) res.add(newNum);// 更新res最后一个的右断点else res.getLast()[1] = Math.max(res.getLast()[1], newEnd);// 处理剩余的while(idx < n){// temp就是之后遍历的区间temp = nums[idx ++];int start = temp[0], end = temp[1];// 上一个的右端点小于 下一个的左端点 ,没有交集if (res.getLast()[1] < start) res.add(temp);else res.getLast()[1] = Math.max(res.getLast()[1], end);}return res.toArray(new int[res.size()][]);}
58. 最后一个单词的长度给定一个仅包含大小写字母和空格 ' ' 的字符串 s , 返回其最后一个单词的长度 。 如果字符串从左向右滚动显示 , 那么最后一个单词就是最后出现的单词 。如果不存在最后一个单词 , 请返回 0。
说明:一个单词是指仅由字母组成、不包含任何空格字符的 最大子字符串 。
示例:
输入: "Hello World"输出: 5public int lengthOfLastWord(String s) {// s (i,j]仅包含大小写字母和空格int j = s.length() - 1;while(j >= 0int i = j;while(i >= 0return j - i;}
59. 螺旋矩阵 II给定一个正整数 n , 生成一个包含 1 到 n2 所有元素 , 且元素按顺时针顺序螺旋排列的正方形矩阵 。示例:
输入: 3输出:[ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7, 6, 5 ]]
向量位移public int[][] generateMatrix(int n) {int[][] res = new int[n][n];int[] dx = {0, 1, 0, -1};int[] dy = {1, 0, -1, 0};int x = 0, y = 0, d = 0;for(int i = 1; i <= n * n; i ++){res[x][y] = i;int a = x + dx[d], b = y + dy[d];// 转向的条件 1. 越界 2. 走过if(a < 0 || b < 0 || a >= n || b >= n || res[a][b] != 0){d = (d + 1) % 4;a = x + dx[d]; b = y + dy[d];}// 更新下一个点的位置x = a; y = b;}return res;}
- TikTok推出首个利用iPhone 12 Pro LiDAR技术的AR特效
- Looking Glass推出由全息成像技术打造的3D照片软件
- 最壕“年终奖”出炉!雷军下血本:一次颁发两个百万美金技术大奖
- 小米授予技术团队百万美元大奖 雷军:将继续加大技术投入
- 「央广网评」扫码点餐 技术进步不能脱离人性化服务
- 华为为河北“火眼”实验室(气膜版)提供网络技术保障
- 与荷兰光刻机完成联机!国产芯片设备传来喜讯:技术问题已经解决
- 国产芯再传好消息,关键技术问题已经解决,与荷兰光刻机联机成功
- 搬起石头砸自己脚!日本这项技术封锁中国,如今舔着脸求我们教他
- 企业|技术快速迭代倒逼知识产权“贴身”服务,上海首家AI商标品牌指导站入驻徐汇西岸