LeetCode 0088. 合并兩個有序數組

【LetMeFly】88.合并兩個有序數組:O(m + 1) + O(1)的做法

力扣題目鏈接:https://leetcode.cn/problems/merge-sorted-array/

給你兩個按 非遞減順序 排列的整數數組?nums1 nums2,另有兩個整數 mn ,分別表示 nums1nums2 中的元素數目。

請你 合并 nums2 nums1 中,使合并后的數組同樣按 非遞減順序 排列。

注意:最終,合并后數組不應由函數返回,而是存儲在數組 nums1 中。為了應對這種情況,nums1 的初始長度為 m + n,其中前 m 個元素表示應合并的元素,后 n 個元素為 0 ,應忽略。nums2 的長度為 n

?

示例 1:

輸入:nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3
輸出:[1,2,2,3,5,6]
解釋:需要合并 [1,2,3] 和 [2,5,6] 。
合并結果是 [1,2,2,3,5,6] ,其中斜體加粗標注的為 nums1 中的元素。

示例 2:

輸入:nums1 = [1], m = 1, nums2 = [], n = 0
輸出:[1]
解釋:需要合并 [1] 和 [] 。
合并結果是 [1] 。

示例 3:

輸入:nums1 = [0], m = 0, nums2 = [1], n = 1
輸出:[1]
解釋:需要合并的數組是 [] 和 [1] 。
合并結果是 [1] 。
注意,因為 m = 0 ,所以 nums1 中沒有元素。nums1 中僅存的 0 僅僅是為了確保合并結果可以順利存放到 nums1 中。

?

提示:

  • nums1.length == m + n
  • nums2.length == n
  • 0 <= m, n <= 200
  • 1 <= m + n <= 200
  • -109 <= nums1[i], nums2[j] <= 109

?

進階:你可以設計實現一個時間復雜度為 O(m + n) 的算法解決此問題嗎?

方法一:三指針(雙指針)

這道題不返回任何值,很顯然,出題者想讓你在nums1數組上原地修改。

怎么原地修改呢?nums1后面全是 0 0 0,而這些地方本來應該是“大數”,所以我們使用兩個指針,從 n u m s 1 nums1 nums1 n u m s 2 nums2 nums2的大數區域往前指,每次將二者較大的那個放到nums1后面不就可以了嗎。

      tail↓
1 3 0 0↑
2 6↑

3 < 6 3 < 6 3<6,所以將 6 6 6放到tail處,

    tail↓
1 3 0 6↑
2 -
↑

3 > 2 3 > 2 3>2,所以將 3 3 3放到tail處,

  tail↓
1 - 3 6
↑
2 -
↑

1 < 2 1 < 2 1<2,所以將 2 2 2放到tail處,

tail
↓
1 2 3 6
↑
- -

n u m s 2 nums2 nums2的指針指完了,任務完成,得到 [ 1 , 2 , 3 , 6 ] [1, 2, 3, 6] [1,2,3,6]

  • 時間復雜度 O ( m + n ) O(m + n) O(m+n)
  • 空間復雜度 O ( 1 ) O(1) O(1)

AC代碼

C++

class Solution {
public:void merge(vector<int>& nums1, int l1, vector<int>& nums2, int l2) {int n = l1 + l2 - 1;l1--, l2--;while (l2 >= 0) {while (l1 >= 0 && nums1[l1] > nums2[l2]) {nums1[n--] = nums1[l1--];}nums1[n--] = nums2[l2--];}}
};

Python

from typing import Listclass Solution:def merge(self, nums1: List[int], l1: int, nums2: List[int], l2: int) -> None:"""Do not return anything, modify nums1 in-place instead."""l = l1 + l2 - 1l1, l2 = l1 - 1, l2 - 1while l2 >= 0:while l1 >= 0 and nums1[l1] > nums2[l2]:nums1[l] = nums1[l1]l, l1 = l - 1, l1 - 1nums1[l] = nums2[l2]l, l2 = l - 1, l2 - 1

同步發文于CSDN,原創不易,轉載經作者同意后請附上原文鏈接哦~
Tisfy:https://letmefly.blog.csdn.net/article/details/132256535

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/36561.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/36561.shtml
英文地址,請注明出處:http://en.pswp.cn/news/36561.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Linux:Shell編輯之文本處理器(sed)

目錄 緒論 1、sed的原理&#xff1a;讀取 執行 顯示 三個過程 2、sed 文本內容處理工具&#xff0c;文件過大怎么辦&#xff1f; 3、sed的操作選項 3.1 常用選項 3.2 操作符 3.3 行號的范圍打印 3.4 對包含指定字符串的內容進行打印 3.5 刪 3.5.1 正則表達式刪除 3.6…

一個工作簿中的多個工作表拆分成多個工作簿

在Excel 2016中將一個工作簿中的多個工作表拆分成多個工作簿&#xff0c;在開發工具中的vba 模塊中輸入一下代碼&#xff08;并修改savepath的值為要存儲的路徑&#xff09;&#xff0c;然后運行即可。 Sub SplitWorkbook()Dim srcWorkbook As WorkbookDim srcWorksheet As Wo…

深入淺出 棧和隊列(附加循環隊列、雙端隊列)

棧和隊列 一、棧 概念與特性二、Stack 集合類及模擬實現1、Java集合中的 Stack2、Stack 模擬實現 三、棧、虛擬機棧、棧幀有什么區別&#xff1f;四、隊列 概念與特性五、Queue集合類及模擬實現1、Queue的底層結構&#xff08;1&#xff09;順序結構&#xff08;2&#xff09;鏈…

Golang-使用 gvm 進行版本控制

當你想為每個項目切換 go 版本時&#xff0c;gvm (Go Version Manager) 很方便。 這里&#xff0c;我將介紹“如何在Mac上安裝gvm”和“如何使用gvm” 使用準備 僅適用于 Mac 的準備工作 按照MacOSX 要求中的說明執行以下命令。 xcode-select --install brew update brew …

C++(Qt)軟件調試---將調試工具安裝到AeDebug(11)

C(Qt)軟件調試—將調試工具安裝到AeDebug&#xff08;11&#xff09; 文章目錄 C(Qt)軟件調試---將調試工具安裝到AeDebug&#xff08;11&#xff09;1、前言1.1 使用的調試工具 2、調試器安裝1.1 WinDbg1.2 procdump1.3 DrMinGW1.4 vsjitdebugger 更多精彩內容&#x1f449;個…

深入了解Linux運維的重要性與最佳實踐

Linux作為開源操作系統的代表&#xff0c;在企業級環境中的應用越來越廣泛。而在保障Linux系統的正常運行和管理方面&#xff0c;Linux運維顯得尤為關鍵。本文將介紹Linux運維的重要性以及一些最佳實踐&#xff0c;幫助讀者更好地了解和掌握Linux系統的運維技巧。 首先&#xf…

OPENCV C++(十)gramm矯正+直方圖均衡化

兩者都是只對單通道使用&#xff0c;對多通道的話 就需要分離通道處理再合并通道 兩種方法&#xff0c;第一個要運算次數太多了&#xff0c;第二個只需要查表 伽馬矯正函數&#xff0c;這里用第二種方法&#xff0c;且寫法有點高級 int gammaCorrection(cv::Mat srcMat, cv::…

Java【Spring】使用注解, 更簡單的存儲和獲取 Bean

文章目錄 前言一、存儲 Bean1, 配置文件2, 五大類注解Bean 的命名規則 3, 方法注解Bean 的命名規則 二、獲取 Bean1, 屬性注入2, Setter 注入3, 構造方法注入4, Autowired 和 Resource 的區別5, 同一個類型的多個 Bean 注入問題 總結 前言 各位讀者好, 我是小陳, 這是我的個人主…

【網絡基礎實戰之路】實現RIP協議與OSPF協議間路由交流的實戰詳解

系列文章傳送門&#xff1a; 【網絡基礎實戰之路】設計網絡劃分的實戰詳解 【網絡基礎實戰之路】一文弄懂TCP的三次握手與四次斷開 【網絡基礎實戰之路】基于MGRE多點協議的實戰詳解 【網絡基礎實戰之路】基于OSPF協議建立兩個MGRE網絡的實驗詳解 PS&#xff1a;本要求基于…

FreeRTOS(任務通知)

資料來源于硬件家園&#xff1a;資料匯總 - FreeRTOS實時操作系統課程(多任務管理) 目錄 一、任務通知的概念 1、概念 2、發送通知給任務的方式 3、任務通知使用限制 二、任務通知的運行機制 三、任務通知的API函數 1、任務通知的數據結構 2、常用的API函數 3、函數x…

opencv實戰項目 手勢識別-實現尺寸縮放效果

手勢識別系列文章目錄 手勢識別是一種人機交互技術&#xff0c;通過識別人的手勢動作&#xff0c;從而實現對計算機、智能手機、智能電視等設備的操作和控制。 1. opencv實現手部追蹤&#xff08;定位手部關鍵點&#xff09; 2.opencv實戰項目 實現手勢跟蹤并返回位置信息&…

Linux elasticsearch設置為開機自啟動服務

Linux elasticsearch怎么設置為設置為開機自啟動服務 1、進入/etc/init.d目錄 cd /etc/init.d 2、新建文件elasticsearch&#xff0c;注意&#xff0c;沒有擴展名 vi elasticsearch 3、新建文件elasticsearch的內容如下 說明&#xff1a; &#xff08;1&#xff09;“su…

基于低代碼和數字孿生技術的電力運維平臺設計

電力能源服務商在為用能企業提供線上服務的時候&#xff0c;不可避免要面對用能企業的各種個性化需求。如果這些需求和想法都要靠平臺廠家研發人員來實現&#xff0c;那在周期、成本、效果上都將是無法滿足服務運營需要的&#xff0c;這也是目前很多線上能源云平臺應用效果不理…

【狀態模式】拯救if-else堆出來的屎山代碼

前言 我想大家平時都在開發重都遇見過屎山代碼&#xff0c;這些屎山代碼一般都是由于復雜且龐大的if-else造成的&#xff0c;狀態模式&#xff0c;是一種很好的優化屎山代碼的設計模式&#xff0c;本文將采用兩個業務場景的示例來講解如何使用狀態模式拯救屎山代碼。 目錄 前…

【Axure高保真原型】通過輸入框動態控制環形圖

今天和大家分享通過輸入框動態控制環形圖的原型模板&#xff0c;在輸入框里維護項目數據&#xff0c;可以自動生成對應的環形圖&#xff0c;鼠標移入對應扇形&#xff0c;可以查看對應數據。使用也非常方便&#xff0c;只需要修改輸入框里的數據&#xff0c;或者復制粘貼文本&a…

簡單記錄牛客top101算法題(初級題C語言實現)BM17 二分查找 BM21 旋轉數組的最小數字 BM23 二叉樹的前序遍歷

1. BM17 二分查找 要求&#xff1a;給定一個 元素升序的、無重復數字的整型數組 nums 和一個目標值 target &#xff0c;寫一個函數搜索 nums 中的 target&#xff0c;如果目標值存在返回下標&#xff08;下標從 0 開始&#xff09;&#xff0c;否則返回 -1。 輸入&#xff1a…

【云原生】K8S存儲卷:PV、PVC詳解

目錄 一、emptyDir存儲卷二、hostPath存儲卷三、nfs共享存儲卷四、PVC 和 PV4.1 NFS使用PV和PVC4.2創建動態PV 一、emptyDir存儲卷 容器磁盤上的文件的生命周期是短暫的&#xff0c;這就使得在容器中運行重要應用時會出現一些問題。首先&#xff0c;當容器崩潰時&#xff0c;ku…

UG NX二次開發(C++)-PK函數創建一條圓弧曲線

文章目錄 1、前言2、創建一個項目3、添加頭文件4、在do_it中添加創建圓曲線的源代碼5、調用dll6、再創建一個長方體驗證1、前言 采用PK進行UG NX二次開發,現在看到的文章很多是直接創建實體,然后在UG NX的視圖區顯示出來,對于創建圓曲線的文章不多,本文講一下PK函數創建圓…

Java基礎篇--日期時間類

目錄 前言 Instant&#xff08;時間戳&#xff09;類 LocalData(日期)類 LocalTime(時間)類 LocalDataTime(日期時間)類 Duration(時間間隔)類 Period(日期間隔)類 Clock&#xff08;獲取時區&#xff09;類 前言 在開發中經常需要處理日期和時間&#xff0c;Java提供…

Git 代碼分支規范

目的 俗話說&#xff1a;沒有規矩&#xff0c;不成方圓。遵循一個好的規章制度能讓你的工作事半功倍。同時也可以展現出你做事的認真的態度以及你的專業性&#xff0c;不會顯得雜亂無章&#xff0c;管理困難。Git分支規范也是一樣。當遵循了某種約定的Git分支&#xff0c;在代…