LeetCode第88题合并两个有序数组

继续打卡算法题,今天学习的是第88题合并两个有序数组,这道题目是道简单题。算法题的一些解题思路和技巧真的非常巧妙,每天看一看算法题和解题思路,我相信对我们的编码思维和编码能力有一些提升。

分析一波题目

本题需要将两个数组合并结果存入第一个数组,我们如果从前往后合,需要移动数据。我们可以从最大的数开始合并,将大的数填充第一个数组的后面,这样就不需要移动第一个数组的数据了。

本题解题技巧

1、使用三个指针,一个是index1最开始指向数组1最后一个元素,一个是index2指向数组2最后一个元素,一个指针指向数组1最后一个位置(表示下一次需要存的数)

编码解决

java 复制代码
class Solution {
    public void merge(int[] nums1, int m, int[] nums2, int n) {

        int newSize = m+n;
        int startIndex = m+n -1;

        int index1 = m-1;
        int index2= n-1;
        
        while (index1 >=0 || index2 >= 0) {

            if(index1 >= 0 && index2>=0) {
                  int t1 = nums1[index1];
                  int t2 = nums2[index2];
                  if(t1 >= t2) {
                    nums1[startIndex] = t1;
                    index1--;
                  } else {
                    nums1[startIndex] = t2;
                    index2--;
                  }
            } else if(index1 >=0){
                    int t1 = nums1[index1];
                    nums1[startIndex] = t1;
                    index1--;
            } else if(index2 >=0) {
                    int t2 = nums2[index2];
                    nums1[startIndex] = t2;
                    index2--;
                    
            }
            startIndex--;

        }

    }
}

总结

1、本题解题是从最大的数开始合并,避免了移动数组元素

相关推荐
不知天地为何吴女士1 小时前
Day32| 509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯
算法
小坏坏的大世界1 小时前
C++ STL常用容器总结(vector, deque, list, map, set)
c++·算法
励志要当大牛的小白菜3 小时前
ART配对软件使用
开发语言·c++·qt·算法
qq_513970444 小时前
力扣 hot100 Day56
算法·leetcode
武子康4 小时前
Java-80 深入浅出 RPC Dubbo 动态服务降级:从雪崩防护到配置中心秒级生效
java·分布式·后端·spring·微服务·rpc·dubbo
PAK向日葵4 小时前
【算法导论】如何攻克一道Hard难度的LeetCode题?以「寻找两个正序数组的中位数」为例
c++·算法·面试
舒一笑4 小时前
我的开源项目-PandaCoder迎来史诗级大更新啦
后端·程序员·intellij idea
@昵称不存在6 小时前
Flask input 和datalist结合
后端·python·flask
zhuyasen6 小时前
Go 分布式任务和定时任务太难?sasynq 让异步任务从未如此简单
后端·go
东林牧之6 小时前
Django+celery异步:拿来即用,可移植性高
后端·python·django