88.合并两个有序数组
非递减顺序,即非严格递增序列
自己没写出来
class Solution { public void merge(int[] nums1, int m, int[] nums2, int n) { int tail1 = m-1; int tail2 = n-1; int tail = nums1.length - 1; while(tail1 >= 0 && tail2 >= 0){ // 区别在这里 if(nums1[tail1] >= nums2[tail2]){ nums1[tail] = nums1[tail1]; tail1 --; }else{ nums1[tail] = nums2[tail2]; tail2 --; } tail --; } } }
修改
class Solution { public void merge(int[] nums1, int m, int[] nums2, int n) { int tail1 = m-1; int tail2 = n-1; int tail = nums1.length - 1; while(tail2 >= 0){ // 区别在这里 if(tail1 >= 0 && nums1[tail1] >= nums2[tail2]){ // 区别在这里 nums1[tail] = nums1[tail1]; tail1 --; }else{ nums1[tail] = nums2[tail2]; tail2 --; } tail --; } } }
要后判断,防止nums1数组的有效元素为0个的情况出现,错误示例
吴师兄的
class Solution { public void merge(int[] nums1, int m, int[] nums2, int n) { // 索引从有序数组 nums1 有效元素的末端开始 // 数组的下标索引从零开始计数 // 索引 0 1 2 // 数组 [ 1 , 2 , 3 ] int i = m - 1; // 索引从有序数组 nums2 的末端开始 int j = n - 1; // 从有序数组 nums1 最末端的位置开始保存元素 int cur = nums1.length - 1; // 通过循环把 num2 的元素都移动到 num1 中 while( j >= 0 ){ // 比较 num1 和 num2 中当前的元素大小 // 如果 num1 中的索引位置为 i 的元素大于 num2 中索引位置为 j 的元素 // 为了防止越界 i 必须是大于等于 0 if( i >=0 && nums1[i] > nums2[j] ){ // 把 num1 中的索引位置为 i 的元素复制到索引为 cur 的位置 // 此时 cur 的元素已经确定下来 nums1[cur] = nums1[i]; // 接下来去确定 cur 前面一个元素应该放什么数字 cur--; // 此时,索引 i 需要向前移动 i--; // 否则,如果 num1 中的索引位置为 i 的元素小于或者等于 num2 中索引位置为 j 的元素 }else{ // 把 num2 中的索引位置为 j 的元素复制到索引为 cur 的位置 nums1[cur] = nums2[j]; // 接下来去确定 cur 前面一个元素应该放什么数字 cur--; // 此时,索引 j 需要向前移动 j--; } } } }
class Solution { public void merge(int[] nums1, int m, int[] nums2, int n) { int i = m - 1; int j = n - 1; int cur = nums1.length - 1; while( j >= 0 ){ if( i >=0 && nums1[i] > nums2[j] ){ nums1[cur] = nums1[i]; cur--; i--; }else{ nums1[cur] = nums2[j]; cur--; j--; } } } }
本文作者:清澈的澈
本文链接:https://www.cnblogs.com/lmc7/p/18095865
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步