Passion and Patience

Work Hard, Play Hard

导航

Leecode 合并两个有序数组

Day 2 刷题

未ac,力扣官方解题思路:利用双指针来把数组更新重载到新数组sorted内

class Solution {
    public void merge(int[] nums1, int m, int[] nums2, int n) {
        int p1 = 0, p2 = 0; 
        // refining the sorted array
        int[] sorted = new int[m+n];
        int cur;
        // all has been Traverse
        while(p1<m||p2<n){
            if (p1==m){
                // str1 has already been traversed
                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];
        }
        
    }
}

评论区众吐槽赖皮的方法:把数组2 concatenate到数组1结尾,在使用数组的sort方法...

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);
    }
}

补充:Array类的常用方法:Arrays.fill(arr,4);//给所有值赋值4Arrays.sort(arr,0,3);//给第0位(0开始)到第3位(不包括)排序,忽略大小写:Arrays.sort(strArray, String.CASE_INSENSITIVE_ORDER);

posted on 2024-03-17 22:33  安静的聆  阅读(9)  评论(0)    收藏  举报