zoukankan      html  css  js  c++  java
  • [leetcode] Merge Sorted Array

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

    Note:

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

    Example:

    Input:
    nums1 = [1,2,3,0,0,0], m = 3
    nums2 = [2,5,6],       n = 3
    
    Output: [1,2,2,3,5,6]
    

     分析:这个题目理解起来比较容易,就是给两个有序的数组,要求将他们合并成一个有序的数组。有意思的是这个题目要求在nums1这个数组的基础上进行合并。如果没有这个要求,当然很容易了,另开一个数组,然后用两个指针比较头节点的大小,add到新的数组里。
    但是因为要求在nums1中完成,所以依然依靠双指针的思想。
    第一个想法是两个指针从头到尾遍历,然后nums1每个位置元素向后挪的这种思想,结果发现不行,没有办法处理例子所示的5和6两种情况。因为0既可能是数字出现,也可能是作为补位出现。
    第二个想法:从两个指针都从后往前,因为数组开的足够大,所以可以直接使用替换的方法来做。非常巧妙的思路。
    代码如下:
     1 class Solution {
     2    public void merge(int[] nums1, int m, int[] nums2, int n) {
     3         int i = m - 1;
     4         int j = n - 1;
     5         int k = m + n - 1;
     6         while ( i >= 0 && j >= 0 ){
     7             if ( nums1[i] >= nums2[j] )
     8                 nums1[k--] = nums1[i--];
     9             else
    10                 nums1[k--] = nums2[j--];
    11         }
    12         while ( j >= 0 ){
    13             nums1[k--] = nums2[j--];
    14         }
    15     }
    16 }

    运行时间3ms。

    总结:找到实习之后有一个月没有刷题了,被师兄一语点醒梦中人。还是要不停的充实自己。以后保证每天至少刷一个题,即使在上班时也要抽空刷题!加油!

  • 相关阅读:
    软件工程——结构化方法
    静态变量的坑
    OpenCV中对Mat的遍历访问与赋值
    SQL SERVER 自定义函数 整数转成指定长度的16进制 转换成指定长度的16进制 不足补0
    Ext.Net中的Task控件的使用
    字符集越界 正则表达式匹配车牌
    [TOEIC] 2013年12月25日托业考试总结
    WebKit 内容整理
    [C#/.NET]how to implement web application localization in .net 4.0
    C# 代码为什么比 C++代码 编译速度快?
  • 原文地址:https://www.cnblogs.com/boris1221/p/9575853.html
Copyright © 2011-2022 走看看