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

b5711453cc09d4aaa404548a196bda39.png

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

題目描述

給你兩個有序整數數組 nums1nums2,請你將 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

解題思路

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

14292311d9fded06bda81ba209d6b24b.png

解法

解法一: 暴力法

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

bac5e2ca57c940d742d592f0f3f50a93.png

解法二:倒插法

已知條件

  1. Nums1 的剩余空間剛好可以存放nums2的元素
  2. nums1和nums2都是有序的。
  3. 已知兩個數組的元素個數

通過分析一直條件我們可以發現,nums1存在一定的后置空間,因此我們可以考慮通過對兩個數組的末位元素進行對比,然后從后往前插入到nums1中的方法。

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

P0: 記錄nums1的新元素位置

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

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

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

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

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

  1. P1 == 0 P2 ==0 數組都遍歷完了
  2. P1 == 0 P2 > 0 Nums2沒有遍歷完
  3. 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)

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

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

相關文章

git切換用戶密碼_Java小白入門,常用Git命令有哪些?

Git簡介Git是一個開源的分布式版本控制系統&#xff0c;用于敏捷高效地處理任何或小或大的項目。Git是 Linus Torvalds 為了幫助管理 Linux 內核開發而開發的一個開放源碼的版本控制軟件。Git與常用的版本控制工具 CVS, Subversion 等不同&#xff0c;它采用了分布式版本庫的方…

with語句python_Python之with語句

Python之with語句在Python中&#xff0c;我們在打開文件的時候&#xff0c;為了代碼的健壯性&#xff0c;通常要考慮一些異常情況&#xff0c;比如&#xff1a;try:ccfile open(/path/data)contentccfile.readlines()ccfile.close()exceptIOError:log.write(no data read\n)我們…

css中的單位換算_css大小單位px em rem的轉換和詳解

css大小單位px em rem的轉換和詳解PX特點1. IE無法調整那些使用px作為單位的字體大小&#xff1b;2. 國外的大部分網站能夠調整的原因在于其使用了em或rem作為字體單位&#xff1b;3. Firefox能夠調整px和em&#xff0c;rem&#xff0c;但是96%以上的中國網民使用IE瀏覽器(或內…

有幾種部署模式_來!PyFlink 作業的多種部署模式

關于 PyFlink 的博客我們曾介紹過 PyFlink 的功能開發&#xff0c;比如&#xff0c;如何使用各種算子(Join/Window/AGG etc.)&#xff0c;如何使用各種 Connector(Kafka, CSV, Socket etc.)&#xff0c;還有一些實際的案例。這些都停留在開發階段&#xff0c;一旦開發完成&…

office2007每次打開都配置進度_office2007 每次打開word,excel等顯示正在配置Office Professional Plus 2007的解決方...

有時候 Office2007打開文檔&#xff0c;每次都提示需要安裝。配置&#xff0c;配置完成之后&#xff0c;下次打開又需要配置點擊取消就不能打開。非常的煩。ffice2007下載后為什么每次打開總需要置&#xff1f;office2007每次打開都要正在配置&#xff1f;其實不需要重新安裝可…

mysql命令參數_MySQL命令行參數完整版

MySQL命令行參數完整版mysql教程支持下面的選項&#xff1a;---help&#xff0c;-&#xff1f;顯示幫助消息并退出。--batch&#xff0c;-B打印結果&#xff0c;使用tab作為列間隔符&#xff0c;每個行占用新的一行。使用該選項&#xff0c;則mysql不使用歷史文件。--character…

consul 文件夾無法顯示_consul集群搭建參考

1.官網下載安裝包https://releases.hashicorp.com/consul/1.4.3/consul_1.4.3_linux_amd64.zip2.部署節點如下192.168.8.142 sxconsul1192.168.8.143 sxconsul2192.168.8.144 sxconsul33.解壓之后的consul是一個可執行文件&#xff0c;復制到/usr/local/bin/ 下4.三臺服務器創建…

mysql linux環境安裝_MySQL Linux環境的安裝配置

在Kali中已經內置了MySQL(鏡像可以從mysql.com/downloads/ 下載安裝)奇怪的是博主我的kali內置的是mariaDB數據庫&#xff0c;所以我也懶得弄MySQL了&#xff01;直接mariaDB吧&#xff01;差不多【PS:據博主所致&#xff0c;mariaDB的操作和MySQL一樣哦&#xff01;在這后面有…

mysql not in 轉化_[轉]mysql里not in語句怎么寫 | 學步園

使用mysql中經常會遇到的問題&#xff0c;記錄下來轉自&#xff1a; http://database.e800.com.cn/articles/2007/630/1183147360019880660_1.htmlselect bid from board where not in (select bid from favorite)但在mysql里就提示SQL語句的語法不對&#xff0c;“...near sel…

java mysql 事物_java基礎之MySQL事務和視圖

第三節 事務和視圖3.1事務事務是用來維護數據庫完整性的&#xff0c;它能夠保證一系列的MySQL操作要么全部執行&#xff0c;要么全不執行。舉一個例子來進行說明&#xff0c;例如轉賬操作&#xff1a;A賬戶要轉賬給B賬戶&#xff0c;那么A賬戶上減少的錢數和B賬戶上增加的錢數必…

define定義的是什么類型_DEFINE_PROFILE用法介紹(1)

“ 長風破浪會有時&#xff0c;直掛云帆濟滄海&#xff01;”01—概述可以使用DEFINE_PROFILE定義一個自定義邊界配置文件或單元格區域條件&#xff0c;該條件隨空間坐標或時間而變化。可以自定義的變量如下:速度&#xff0c;壓力&#xff0c;溫度&#xff0c;湍流動能&#xf…

如何判斷輸入的是字符還是數字_[Leetgo]判斷字符串是否為數字

題解分析代碼實現實現一個函數用來判斷字符串是否表示數值(包括整數和小數)。題解分析一個標識數字的字符串可能包括以下字符類型&#xff1a;空格&#xff1b;數組&#xff1a;0~9&#xff1b;正負號小數點冪符號&#xff1a;e/E&#xff1b;為了解決此類問題&#xff0c;需要…

mysql索引優化面試題_mysql索引優化面試題

曾經偷偷的面試了兩個單位&#xff0c;都提到了Mysql的優化問題&#xff0c;所以以后要多多學習數據庫的優化知識了。建設數據庫的優化大概主要就是索引的優化了吧&#xff0c;因為我們不可能修改數據結構的情況下&#xff0c;提高數據庫的查詢效率似乎也只能用索引了。當然這也…

python 可視化大屏幕_如何用python搭建可視化看板?

可視化看板是指大屏 駕駛艙 dashboard這些嗎&#xff0c;如果是&#xff0c;那不建議用python來做&#xff0c;不專業&#xff0c;目前沒有見過哪個項目上的大屏是用python做的&#xff0c;它不是萬能的大屏的制作一般是這樣的先根據用戶的需求&#xff0c;所在的行業&#xff…

mysql語句轉為sql語句_MySQL 的分頁查詢 SQL 語句(轉)

轉自 https://www.cnblogs.com/wbxk/p/10644766.htmlMySQL一般使用 LIMIT 實現分頁。基本語句為&#xff1a;SELECT ... FROM ... WHERE ... ORDER BY ... LIMIT ...在中小數據量的情況下&#xff0c;這樣的SQL足夠用了&#xff0c;唯一需要注意的問題就是確保使用了索引。舉例…

mysql查詢選課最少成績最高_MySQL 練習

最近在學習MYSQL 數據庫&#xff0c;在此mark 一下做過的sql 相關練習表結構如下&#xff1a;teacher表tidtnameclass表cidcaptioncourse表cidcnameteacher_idstudent表sidgenderclass_idsnamescore表sidstudent_idcourse_idnumclass :teacher : course : student :score : 根…

mysql中nchar_淺談SQL Server、MySQL中char,varchar,nchar,nvarchar區別

1&#xff0c;定義&#xff1a;char&#xff1a; 固定長度&#xff0c;存儲ANSI字符&#xff0c;不足的補英文半角空格。nchar&#xff1a; 固定長度&#xff0c;存儲Unicode字符&#xff0c;不足的補英文半角空格varchar&#xff1a; 可變長度&#xff0c;存儲ANSI字符&…

mysql 5.764_RHEL5.764位源碼編譯安裝MySQL-5.5.42遇到的問題

由于MySQL從5.5之后的版本源碼編譯安裝用cmake, make, make install安裝,不用./Configure,make,make install 安裝&#xff0c;所以要看下系由于MySQL從5.5之后的版本源碼編譯安裝用cmake, make, make install安裝,不用./Configure,make,make install 安裝&#xff0c;所以要看…

java 判斷子類_java判斷class是否是某個類的子類或父類

Class c = ArrayList.class; c.isPrimitive(); //判斷c是否為基本數據類型 c.isAssignableFrom(List.class); //判斷c是否是List類的子類或父類 c.getGenericType(); //得到泛型類型 免費學習視頻分享:java視頻教程 實例:通過反射得到List 集合中的泛型類型package com.zf.ta…

java轉日期_Java時間日期格式轉換

import java.util.*;import java.text.*;importjava.util.Calendar;public classVeDate {/*** 獲取現在時間**return返回時間類型 yyyy-MM-dd HH:mm:ss*/public staticString getNowDate() {Date currentTime newDate();SimpleDateFormat formatter new SimpleDateFormat("…