• 88. Merge Sorted Array


    一、题目

      1、审题

      2、分析

        给出有序整数数组 nums1、nums2,将 nums2 中元素放入 nums1 中,且使得nums1仍然有序,假使 nums1 空间足够大。

    二、解答

      1、思路:

        方法一、

          将 nums1 与 nums2 依次进行比较,将小的数放在 nums1 从下标为 0 开始的位置,大的数值放入 nums2 并在nums2中进行排序。

          最终 nums2 中的 n 个数均比 nums1 中的 m 个数大,在将 nums2 数放入 nums1 即可。

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

      

      方法二、

        将 nums1 与 nums2 均从数组末尾开始比较,将大的数放在nums1从 m+n-1 的位置并依次向前。

      

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

      

  • 相关阅读:
    素数
    超级素数
    SUMMARIZE 6.1
    广度优先搜索与八字码问题
    poj2352
    poj1198
    康托展开
    STL里的内存池实现
    构造函数,C++内存管理,内存泄漏定位
    内联函数,宏定义,内存对齐,类型转换
  • 原文地址:https://www.cnblogs.com/skillking/p/9700770.html
Copyright © 2020-2023  润新知