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、本题解题是从最大的数开始合并,避免了移动数组元素

相关推荐
是未才12 小时前
从输入 URL 到页面返回:DNS、路由、TLS 与 HTTP 完整链路
java·后端·计算机网络
罗西的思考13 小时前
【OpenClaw具身硬件】MiniClaw 阅读笔记---(1)基础
人工智能·算法·机器学习
DevUI团队13 小时前
从“即兴创作”到“规格先行”,华为云码道(CodeArts)代码智能体持续深耕企业级规范驱动开发能力
前端·人工智能·后端
蛋先生DX14 小时前
大模型参数存储格式揭秘:BF不是男朋友
深度学习·算法·llm
weixin_4316004414 小时前
NestJS 入门(3):Guard 如何挡住未登录请求?
前端·后端·学习·nest.js
爱跳舞的烤冷面14 小时前
自学嵌入式第22天(数据结构——哈希)
数据结构·算法·哈希算法
猎嘤一号15 小时前
博弈论(Game Theory)的理论、算法与工程
人工智能·算法·安全·博弈论
月光船幽幽15 小时前
影子模式下保护 logits 不被修改
人工智能·python·算法
马拉AI15 小时前
腾讯开源 Agent 记忆系统,AI“换对话就忘”的问题有了新解法(附安装使用教程)
人工智能·算法·开源·科研
IT_陈寒15 小时前
JavaScript类型转换把我坑惨了,这破玩意真该早点搞明白
前端·人工智能·后端