LeetCode 题解(224) : Merge Sorted Array

来源:互联网 发布:java api 1.8中文在线 编辑:程序博客网 时间:2024/06/15 00:04

题目:

Given two sorted integer arrays nums1 and nums2, merge nums2 intonums1 as one sorted array.

Note:
You may assume that nums1 has enough space (size that is greater or equal tom + n) to hold additional elements from nums2. The number of elements initialized innums1 and nums2 are m and n respectively.

题解:

有小技巧,假设nums1已经有了m + n的space,任务就是要用nums2和nums1原有的元素去填满这m + n的space。从后比较nums1和nums2,谁大选谁,填在k = m + n - 1的位置,同时k -= 1, 其次,当nums1的元素都用完后,只填nums2的元素。终止条件是nums2的元素全填完。

C++版:

class Solution {public:    void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {        int i = m - 1, j = n - 1, k = m + n - 1;        while(j >= 0) {            if(nums2[j] >= nums1[i] || i < 0) {                nums1[k] = nums2[j];                j--;            } else {                nums1[k] = nums1[i];                i--;            }            k--;        }    }};

Java版:

public class Solution {    public void merge(int[] nums1, int m, int[] nums2, int n) {        int i = m - 1, j = n - 1, k = m + n - 1;        while(j >= 0) {            if(i < 0 || nums2[j] >= nums1[i]) {                nums1[k] = nums2[j];                j--;            } else {                nums1[k] = nums1[i];                i--;            }            k--;        }    }}

Python版:

class Solution(object):    def merge(self, nums1, m, nums2, n):        """        :type nums1: List[int]        :type m: int        :type nums2: List[int]        :type n: int        :rtype: void Do not return anything, modify nums1 in-place instead.        """        i, j, k = m - 1, n - 1, m + n - 1        while j >= 0:            if i < 0 or nums2[j] >= nums1[i]:                nums1[k] = nums2[j]                j -= 1            else:                nums1[k] = nums1[i]                i -= 1            k -= 1        


0 0
原创粉丝点击