• [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。

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

  • 相关阅读:
    监听器
    过滤器
    连接池与分页
    jdbc优化
    jdbc入门
    web开发mysql基础
    自定义标签
    jsp基础
    会话管理入门
    19. Remove Nth Node From End of List C++删除链表的倒数第N个节点
  • 原文地址:https://www.cnblogs.com/boris1221/p/9575853.html
Copyright © 2020-2023  润新知