国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

算法leetcode|88. 合并兩個(gè)有序數(shù)組(rust重拳出擊)

這篇具有很好參考價(jià)值的文章主要介紹了算法leetcode|88. 合并兩個(gè)有序數(shù)組(rust重拳出擊)。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。



88. 合并兩個(gè)有序數(shù)組:

給你兩個(gè)按 非遞減順序 排列的整數(shù)數(shù)組 nums1nums2,另有兩個(gè)整數(shù) mn ,分別表示 nums1nums2 中的元素?cái)?shù)目。

請你 合并 nums2nums1 中,使合并后的數(shù)組同樣按 非遞減順序 排列。

注意:最終,合并后數(shù)組不應(yīng)由函數(shù)返回,而是存儲在數(shù)組 nums1 中。為了應(yīng)對這種情況,nums1 的初始長度為 m + n,其中前 m 個(gè)元素表示應(yīng)合并的元素,后 n 個(gè)元素為 0 ,應(yīng)忽略。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] 。
	合并結(jié)果是 [1,2,2,3,5,6] ,其中斜體加粗標(biāo)注的為 nums1 中的元素。

樣例 2:

輸入:
	
	nums1 = [1], m = 1, nums2 = [], n = 0
	
輸出:
	
	[1]
	
解釋:

	需要合并 [1] 和 [] 。
	合并結(jié)果是 [1] 。

樣例 3:

輸入:
	
	nums1 = [0], m = 0, nums2 = [1], n = 1
	
輸出:
	
	[1]
	
解釋:

	需要合并的數(shù)組是 [] 和 [1] 。
	合并結(jié)果是 [1] 。
	注意,因?yàn)?m = 0 ,所以 nums1 中沒有元素。nums1 中僅存的 0 僅僅是為了確保合并結(jié)果可以順利存放到 nums1 中。

提示:

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

分析:

  • 面對這道算法題目,二當(dāng)家的再次陷入了沉思。
  • 如果直接就把 nums2 放到 num1 后面,然后再對合并后的 num1 進(jìn)行排序,時(shí)間復(fù)雜度是 O((m+n)log(m+n)) ,不是很理想,完全沒有使用數(shù)組本身有序這個(gè)便利條件。
  • 對排序算法熟悉的話,可以想到歸并排序算法,其中將兩個(gè)有序部分合并到一起正好就是我們要做的,但是這樣需要額外的空間,而且最后還需要把結(jié)果再拷貝回 num1 。
  • 稍稍做下優(yōu)化,前面我們之所以要使用額外空間就是因?yàn)樘幚磉^程中會把還沒有處理的 num1 部分覆蓋,我們可以逆向遍歷處理,因?yàn)樽铋_始 num1 的后半部分是空的,所以我們就選取較大值放到末尾,依次處理,而且只要將 nums2 處理完畢就可以停止了,因?yàn)?num1 的剩余部分已經(jīng)是有序的,這樣不需要額外空間,而且時(shí)間復(fù)雜度僅僅是 O(m+n) ,非常不錯(cuò)。

題解:

rust:

impl Solution {
    pub fn merge(nums1: &mut Vec<i32>, m: i32, nums2: &mut Vec<i32>, n: i32) {
        let (mut l1, mut l2, mut l) = (m - 1, n - 1, m as usize + n as usize - 1);
        while l2 >= 0 {
            if l1 >= 0 && nums1[l1 as usize] > nums2[l2 as usize] {
                nums1[l] = nums1[l1 as usize];
                l1 -= 1;
            } else {
                nums1[l] = nums2[l2 as usize];
                l2 -= 1;
            }
            l -= 1;
        }
    }
}

go:

func merge(nums1 []int, m int, nums2 []int, n int)  {
    l1, l2, l := m-1, n-1, m+n-1
	for l2 >= 0 {
		if l1 >= 0 && nums1[l1] > nums2[l2] {
			nums1[l] = nums1[l1]
			l1--
		} else {
			nums1[l] = nums2[l2]
			l2--
		}
		l--
	}
}

c++:

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

python:

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


java:

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

非常感謝你閱讀本文~
歡迎【點(diǎn)贊】【收藏】【評論】三連走一波~
放棄不難,但堅(jiān)持一定很酷~
希望我們大家都能每天進(jìn)步一點(diǎn)點(diǎn)~
本文由 二當(dāng)家的白帽子:https://le-yi.blog.csdn.net/ 博客原創(chuàng)~文章來源地址http://www.zghlxwxcb.cn/news/detail-754914.html


到了這里,關(guān)于算法leetcode|88. 合并兩個(gè)有序數(shù)組(rust重拳出擊)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • leetcode 88 合并兩個(gè)有序數(shù)組

    題目描述: 給你兩個(gè)按 非遞減順序 排列的整數(shù)數(shù)組?nums1 和 nums2,另有兩個(gè)整數(shù) m 和 n ,分別表示 nums1 和 nums2 中的元素?cái)?shù)目。 請你 合并 nums2 到 nums1 中,使合并后的數(shù)組同樣按 非遞減順序 排列。 注意:最終,合并后數(shù)組不應(yīng)由函數(shù)返回,而是存儲在數(shù)組 nums1 中。為了應(yīng)

    2024年02月03日
    瀏覽(19)
  • LeetCode_88. 合并兩個(gè)有序數(shù)組

    目錄 題目描述 思路分析 我的題解 給你兩個(gè)按 非遞減順序 排列的整數(shù)數(shù)組?nums1 和 nums2,另有兩個(gè)整數(shù) m 和 n ,分別表示 nums1 和 nums2 中的元素?cái)?shù)目。 請你 合并 nums2 到 nums1 中,使合并后的數(shù)組同樣按 非遞減順序 排列。 注意:最終,合并后數(shù)組不應(yīng)由函數(shù)返回,而是存儲

    2023年04月15日
    瀏覽(21)
  • ?LeetCode解法匯總88. 合并兩個(gè)有序數(shù)組

    https://github.com/September26/java-algorithms 給你兩個(gè)按? 非遞減順序 ?排列的整數(shù)數(shù)組? nums1 ? 和? nums2 ,另有兩個(gè)整數(shù)? m ?和? n ?,分別表示? nums1 ?和? nums2 ?中的元素?cái)?shù)目。 請你? 合并 ? nums2 ? 到? nums1 ?中,使合并后的數(shù)組同樣按? 非遞減順序 ?排列。 注意: 最終,合并

    2024年02月12日
    瀏覽(29)
  • LeetCode-Java:88合并兩個(gè)有序數(shù)組

    給你兩個(gè)按 非遞減順序 排列的整數(shù)數(shù)組 nums1 和 nums2 ,另有兩個(gè)整數(shù) m 和 n ,分別表示 nums1 和 nums2 中的元素?cái)?shù)目。 請你 合并 nums2 到 nums1 中,使合并后的數(shù)組同樣按 非遞減順序 排列。 注意:最終,合并后數(shù)組不應(yīng)由函數(shù)返回,而是存儲在數(shù)組 nums1 中。為了應(yīng)對這種情況

    2024年02月05日
    瀏覽(29)
  • 88. 合并兩個(gè)有序數(shù)組、Leetcode的Python實(shí)現(xiàn)

    博客主頁:??李歘歘的博客 ?? ??每天不定期分享一些包括但不限于計(jì)算機(jī)基礎(chǔ)、算法、后端開發(fā)相關(guān)的知識點(diǎn),以及職場小菜雞的生活。?? ??點(diǎn)關(guān)注不迷路,總有一些??知識點(diǎn)??是你想要的?? ??今天的內(nèi)容是 ? ? Leetcode? 88. 合并兩個(gè)有序數(shù)組? ?? ? ?????????

    2024年02月06日
    瀏覽(23)
  • 力扣每日一道系列 --- LeetCode 88. 合并兩個(gè)有序數(shù)組

    力扣每日一道系列 --- LeetCode 88. 合并兩個(gè)有序數(shù)組

    ?? 江池?。?個(gè)人主頁 ??個(gè)人專欄: ?數(shù)據(jù)結(jié)構(gòu)探索 ?LeetCode每日一道 ?? 有航道的人,再渺小也不會迷途。 LeetCode 88. 合并兩個(gè)有序數(shù)組 首先創(chuàng)建一個(gè)臨時(shí)數(shù)組,其大小為第一個(gè)數(shù)組的大?。磏ums1Size),其作用主要是。 通過循環(huán)遍歷兩個(gè)數(shù)組,將兩個(gè)數(shù)組元素比較后較

    2024年02月04日
    瀏覽(27)
  • 算法leetcode|80. 刪除有序數(shù)組中的重復(fù)項(xiàng) II(rust重拳出擊)

    給你一個(gè)有序數(shù)組 nums ,請你 原地 刪除重復(fù)出現(xiàn)的元素,使得出現(xiàn)次數(shù)超過兩次的元素只出現(xiàn)兩次 ,返回刪除后數(shù)組的新長度。 不要使用額外的數(shù)組空間,你必須在 原地 修改輸入數(shù)組 并在使用 O(1) 額外空間的條件下完成。 說明 : 為什么返回?cái)?shù)值是整數(shù),但輸出的答案是

    2024年02月09日
    瀏覽(33)
  • 27.移除元素+88.合并兩個(gè)有序數(shù)組

    27.移除元素+88.合并兩個(gè)有序數(shù)組

    目錄 一、移除元素 (一)題目 (二)代碼? 二、合并兩個(gè)有序數(shù)組 (一)題目 (二)代碼 27. 移除元素 - 力扣(LeetCode) ? ? 88. 合并兩個(gè)有序數(shù)組 - 力扣(LeetCode)? ? 用雙指針 ?

    2023年04月14日
    瀏覽(29)
  • 力扣每日一題88:合并兩個(gè)有序數(shù)組

    給你兩個(gè)按? 非遞減順序 ?排列的整數(shù)數(shù)組? nums1 ? 和? nums2 ,另有兩個(gè)整數(shù)? m ?和? n ?,分別表示? nums1 ?和? nums2 ?中的元素?cái)?shù)目。 請你? 合并 ? nums2 ? 到? nums1 ?中,使合并后的數(shù)組同樣按? 非遞減順序 ?排列。 注意: 最終,合并后數(shù)組不應(yīng)由函數(shù)返回,而是存儲在

    2024年02月07日
    瀏覽(24)
  • 【力扣每日一題】88. 合并兩個(gè)有序數(shù)組 &雙指針 & 輔助數(shù)組 & 8.13打卡

    【力扣每日一題】88. 合并兩個(gè)有序數(shù)組 &雙指針 & 輔助數(shù)組 & 8.13打卡

    88. 合并兩個(gè)有序數(shù)組 難度: 簡單 描述: 給你兩個(gè)按 非遞減順序 排列的整數(shù)數(shù)組 nums1 和 nums2,另有兩個(gè)整數(shù) m 和 n ,分別表示 nums1 和 nums2 中的元素?cái)?shù)目。 請你 合并 nums2 到 nums1 中,使合并后的數(shù)組同樣按 非遞減順序 排列。 注意:最終,合并后數(shù)組不應(yīng)由函數(shù)返回,而

    2024年02月09日
    瀏覽(23)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包