LeetCode 88

LeetCode 88

给两个有序数组num1,num2,合并为一个有序的数组存在num1中。这里需要注意的是,合并之后数值存放在num1中,num1的长度大于等于num1.length()+num2.length()。

分析:首先,根据题意,我们就应该马上意识到题目是要求我们在nums1数组上进行操作!不可以new新的数组!

思路:既然只能在nums1中操作,那么就假设nums1的长度足够长。分别在nums1和nums2末尾设立指针(双指针思想).依次进行比大小,从nums1的index位置依次往前存放,index= nums1.lenth+nums2.length;
LeetCode 88_第1张图片

public class Solution1 {

    public void merg(int[] nums1,int m,int[] nums2,int n){

        int i = m -1;//因为数组下标是从0开始的
        int j = n -1;
        int index = m+n-1;

        while(i>=0&&j>=0){//nums1和nums2都有值
            if(nums1[i] > nums2[j])
                nums1[index--] = nums1[i--];//将nums1放到index位置
            else
                nums1[index--] = nums2[j--];//将nums2放到index位置
        }

        while (i>=0){//nums1还有值
              nums1[index--] = nums1[i--];
        }

        while (j>=0){//num2还有值
             nums1[index--] = nums2[j--];
        }

    }

    public static void main(String[] args) {

        int[] num1 = new int[10];
        num1[0] = 3;
        num1[1] = 6;
        num1[2] = 9;
        int[] num2= {10,11,12};

        int m= 3,n= 3;
         (new Solution1()).merg(num1,m,num2,n);

         for(int i = 0;i < num1.length; i ++){
             System.out.println(num1[i] + " ");
         }
    }

}

总结:自己第一次做题的时候确实没想到从nums1nums2的末尾开始比较大小,并放到nums1的末尾。

你可能感兴趣的:(LeetCode,数据结构)