日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

中数组的合并_【美团面试题】合并两个有序数组

發布時間:2023/12/10 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 中数组的合并_【美团面试题】合并两个有序数组 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

【美團面試題】合并兩個有序數組

題目描述

給你兩個有序整數數組 nums1 和 nums2,請你將 nums2 合并到 nums1 中,使 nums1 成為一個有序數組

劃重點

  • 初始化 nums1 和 nums2 的元素數量分別為 m 和 n 。
  • 你可以假設 nums1 有足夠的空間(空間大小大于或等于 m + n)來保存 nums2 中的元素

示例

示例 1:

輸入: nums1 = [1,2,3,0,0,0], m = 3 nums2 = [2,5,6], n = 3輸出:[1,2,2,3,5,6]

提示:

-10^9 <= nums1[i], nums2[i] <= 10^9 nums1.length == m + n nums2.length == n

解題思路

兩個數組分別有序,且最終要輸出的是數組一解法如下

解法

解法一: 暴力法

將數組nums2中的元素全部添加到nums1中,對nums1做排序

解法二:倒插法

已知條件

  • Nums1 的剩余空間剛好可以存放nums2的元素
  • nums1和nums2都是有序的。
  • 已知兩個數組的元素個數
  • 通過分析一直條件我們可以發現,nums1存在一定的后置空間,因此我們可以考慮通過對兩個數組的末位元素進行對比,然后從后往前插入到nums1中的方法。

    所以我們可以用三個指針P0,P1,P2來遍歷數組:

    P0: 記錄nums1的新元素位置

    P1: 記錄nums1原數組的元素位置

    P2: 記錄nums2原數組的元素位置

    設置遍歷條件 (p1 >= 0 && p2 >= 0)

    比較指針指向的元素大小,將較大的元素放入指針P0的位置,同時移動P0和較大元素的指針。

    當遍歷條件為 false時 存在三種情況

  • P1 == 0 P2 ==0 數組都遍歷完了
  • P1 == 0 P2 > 0 Nums2沒有遍歷完
  • P1 > 0 P2 ==0 Nums1沒有遍歷完
  • 當結果出現1和3時,nums1恰好是合并排序的最終結果

    當出現結果2時,說明nums2中還有剩余元素,所以繼續移動指針P1,將nums2剩余元素插入到nums1中就行

    代碼實現

    public void merge(int[] nums1, int m, int[] nums2, int n) {int p1 = m - 1;int p2 = n - 1;int p0 = m + n - 1;while (p1 >= 0 && p2 >= 0) {if (nums1[p1] >= nums2[p2]) {nums1[p0] = nums1[p1];p1--;} else {nums1[p0] = nums2[p2];p2--;}p0--;}// 處理 nums2 沒有遍歷完的情況while (p2 >= 0) {nums1[p0--] = nums2[p2--];}}

    復雜度分析

    時間復雜度:

    O(n + m)

    空間復雜度:

    O(1)

    總結

    以上是生活随笔為你收集整理的中数组的合并_【美团面试题】合并两个有序数组的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。