算法题 合并两个有序数组

简介: 算法题 合并两个有序数组

我们为两个数组分别设置一个指针 p1与 p2来作为队列的头部指针,p1作为nums1的指针,p2作为nums1的指针,从两数组坐标0,开始比大小,谁小谁的数组坐标下的数,用cur记录后,放入sorted数组,这个数组的指针++,如次以此比较,直到两个数组比较完成。

class Solution {
    public void merge(int[] nums1, int m, int[] nums2, int n) {
        int p1 = 0,p2 = 0;
        int[] sorted=new int[m+n];
        int cur;
        while(p1<m || p2<n){
            if(p1 == m){
                cur = nums2[p2++];
            }else if(p2 == n){
                cur = nums1[p1++];
            }else if(nums1[p1]<nums2[p2]){
                cur = nums1[p1++];
            }else{
                cur = nums2[p2++];
            }
            sorted[p1+p2-1]=cur;
        }
        for(int i=0;i<m+n;i++){
            nums1[i]= sorted[i];
        }
    }
}

java中比较bug的方法

将nums2中的值,全部加入到nums1中,之后再用sort方法排序。极其easy且傻瓜

class Solution {
    public void merge(int[] nums1, int m, int[] nums2, int n) {
        for(int i=0;i<n;i++)
        {
            nums1[m+i]=nums2[i];
        }
        Arrays.sort(nums1);
    }
}

逆向双指针

public void merge(int[] nums1, int m, int[] nums2, int n) {
        int p1=m-1;
        int p2=n-1;
        int p=m+n-1;
        while(p2 >= 0){
            if(p1>=0 && nums1[p1]>nums2[p2]){
                nums1[p--]=nums1[p1--];
            }else{
                nums1[p--]=nums2[p2--];
            }
        }
    }


相关文章
|
1月前
|
算法
❤️算法笔记❤️-(每日一刷-26、删除有序数组的重复项)
❤️算法笔记❤️-(每日一刷-26、删除有序数组的重复项)
23 0
|
3月前
|
算法 Java
LeetCode初级算法题:环形链表+排列硬币+合并两个有序数组java解法
LeetCode初级算法题:环形链表+排列硬币+合并两个有序数组java解法
54 0
|
5月前
|
存储 算法 Java
Java查找算法概览:二分查找适用于有序数组,通过比较中间元素缩小搜索范围;哈希查找利用哈希函数快速定位,示例中使用HashMap存储键值对,支持多值关联。
【6月更文挑战第21天】Java查找算法概览:二分查找适用于有序数组,通过比较中间元素缩小搜索范围;哈希查找利用哈希函数快速定位,示例中使用HashMap存储键值对,支持多值关联。简单哈希表实现未涵盖冲突解决和删除操作。
59 1
|
5月前
|
算法 Java
[Java·算法·中等] LeetCode21. 合并两个有序链表
[Java·算法·中等] LeetCode21. 合并两个有序链表
52 2
|
5月前
|
存储 算法 Java
【经典算法】LeetCode 26. 删除有序数组中的重复项:(Java/C/Python3实现含注释说明,Easy)
【经典算法】LeetCode 26. 删除有序数组中的重复项:(Java/C/Python3实现含注释说明,Easy)
39 2
|
5月前
|
存储 算法
数据结构和算法学习记录——删除有序数组中的重复项、合并两个有序数组
数据结构和算法学习记录——删除有序数组中的重复项、合并两个有序数组
24 0
数据结构和算法学习记录——删除有序数组中的重复项、合并两个有序数组
|
6月前
|
算法 前端开发 搜索推荐
二分查找算法:搜索有序数组中目标元素的利器
二分查找算法:搜索有序数组中目标元素的利器
|
6月前
|
算法
|
6月前
|
设计模式 算法 Java
【数据结构和算法】交替合并字符串
给你两个字符串word1和word2。请你从word1开始,通过交替添加字母来合并字符串。如果一个字符串比另一个字符串长,就将多出来的字母追加到合并后字符串的末尾。返回合并后的字符串。
105 1
|
6月前
|
存储 算法 JavaScript
JS算法-输入有序数组
JS算法-输入有序数组