【Java】高效解决 非降序数组合并 两种方法

欢迎浏览高耳机的博客

希望我们彼此都有更好的收获

感谢三连支持!

oj:https://leetcode.cn/problems/merge-sorted-array/submissions/

合并两个有序数组是个经典问题,它不仅在算法学习中频繁出现,也在实际开发中经常遇到。合并数组是一个基础而重要的操作。在Java中,我们有一些方法可以解决这个问题,每种方法都有其独特的优势和适用场景。

首先是第一种,先将两个有序数组合并到nums1中,接着调用Array.sort()方法进行排序,这种方法简单易懂,很容易想到。

java 复制代码
 public void merge1(int[] nums1, int m, int[] nums2, int n) {
        for (int i = 0; i < n; i++) {
            nums1[m+i] = nums2[i];
        }
        Arrays.sort(nums1);
    }

    public static void main1(String[] args) {
        int m = 5;
        int n = 5;
        int[] nums1 = {1,2,4,6,7,0,0,0,0,0};
        int[] nums2 = {1,2,2,4,8};
        Test test = new Test();
        test.merge1(nums1,m,nums2,n);
        System.out.println(Arrays.toString(nums1));
    }

第二种,使用双指针思想,从末尾开始同时对比nums1与nums2,将较大值放入nums1的末尾,同时对应数组长度-- ,来达到排序的目的。

java 复制代码
public void merge2(int[] nums1, int m, int[] nums2, int n) {
    // 从两个数组的末尾开始比较和合并元素,直到其中一个数组遍历完毕
    while (m > 0 && n > 0) {
        // 如果nums2的当前元素大于nums1的当前元素,
        //则将nums2的当前元素放入nums1的末尾
        if (nums2[n - 1] > nums1[m - 1]) {
            nums1[m + n - 1] = nums2[n - 1];
            n--; // 移动nums2指针向前一位
        } else {
            // 否则将nums1的当前元素放入nums1的末尾
            nums1[m + n - 1] = nums1[m - 1];
            m--; // 移动nums1指针向前一位
        }
    }
    // 如果nums2中还有剩余元素,将其逐个放入nums1的前面
    while (n > 0) {
        nums1[n - 1] = nums2[n - 1];
        n--;
    }
}

public static void main(String[] args) {
    int m = 5;
    int n = 5;
    int[] nums1 = {1, 2, 4, 6, 7, 0, 0, 0, 0, 0};
    int[] nums2 = {1, 2, 2, 4, 8}; 
    Test test = new Test(); 
    test.merge2(nums1, m, nums2, n);
    System.out.println(Arrays.toString(nums1));
}

以上就是该问题的两种解决思想;


希望这篇博客能为你理解java编程思想提供一些帮助。

如有不足之处请多多指出。

我是高耳机。

相关推荐
今天AI了吗11 分钟前
Codex 配置自定义 AI API 完整指南:从零到一接入你的专属模型
java·人工智能·python·数据分析·embedding
Tanjia_kiki16 分钟前
谷歌浏览器中F12编辑并重发请求
开发语言·前端·javascript
阿童木写作17 分钟前
跨境电商批量图片翻译与视频字幕翻译工具推荐
python·音视频
程序猿编码19 分钟前
基于GGML的C++17轻量化语音推理引擎:说话人识别与语音分析技术全解析
开发语言·c++·pytorch·深度学习·神经网络·大模型
leihefeng25 分钟前
手写数字识别:KNN vs 逻辑回归实战
python·算法·机器学习·逻辑回归·scikit-learn
SunnyDays101137 分钟前
如何使用 Python 从 Word 文档中提取图片
python·word
2601_9620973642 分钟前
Pathway 实时RAG新方案:抛弃Spark、Flink,生产级数据管道
python·流处理·大数据集群·实时rag·pathway
三十岁老牛再出发1 小时前
9月3日总结
python
传奇开心果编程1 小时前
【Rust入门知识点学与练】第5课:函数
开发语言·学习·rust
秋田君1 小时前
Qt_QMediaPlayer类与QMediaPlaylist类
开发语言·qt