亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Go語(yǔ)言題解LeetCode561數(shù)組拆分

 更新時(shí)間:2022年12月30日 09:42:13   作者:劉09k11  
這篇文章主要為大家介紹了Go語(yǔ)言題解LeetCode561數(shù)組拆分示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

一 描述

561. 數(shù)組拆分 I - 力扣(LeetCode) (leetcode-cn.com)

給定長(zhǎng)度為 2n 的整數(shù)數(shù)組 nums ,你的任務(wù)是將這些數(shù)分成 n 對(duì), 例如 (a1, b1), (a2, b2), ..., (an, bn) ,使得從 1 到 n 的 min(ai, bi) 總和最大。

返回該 最大總和 。

示例 1:

輸入:nums = [1,4,3,2]
輸出:4
解釋?zhuān)核锌赡艿姆址ǎê雎栽仨樞颍椋?
1. (1, 4), (2, 3) -> min(1, 4) + min(2, 3) = 1 + 2 = 3
2. (1, 3), (2, 4) -> min(1, 3) + min(2, 4) = 1 + 2 = 3
3. (1, 2), (3, 4) -> min(1, 2) + min(3, 4) = 1 + 3 = 4
所以最大總和為 4

示例 2:

輸入:nums = [6,2,6,5,1,2]
輸出:9
解釋?zhuān)鹤顑?yōu)的分法為 (2, 1), (2, 5), (6, 6). min(2, 1) + min(2, 5) + min(6, 6) = 1 + 2 + 6 = 9

提示:

1 <= n <= 10^4

nums.length == 2 * n

-10^4 <= nums[i] <= 10^4

二 分析

本質(zhì)思路是將整個(gè)隊(duì)列按從小到大的方式排序,然后從兩個(gè)相近的數(shù)中選取出最小的,取和。使用冒泡法會(huì)超出計(jì)算時(shí)間,因?yàn)檫x用額外增加數(shù)組,將大小作為兩個(gè)數(shù)組的下角標(biāo),從而進(jìn)行排序。

三 答案

class Solution {
public:
    int arrayPairSum(vector<int>& nums) {
       /*
        int arr[nums.size()]={0};
        int temp=0;
        for(int i=0;i<nums.size();i++)
        arr[i]=nums[i];
        for(int i=0;i<nums.size()-1;i++)
        {
            for(int j=i+1;j<nums.size();j++)
            if(arr[i]>arr[j]) {temp=arr[i];arr[i]=arr[j];arr[j]=temp;}   //冒泡排序會(huì)超出時(shí)間限制
        }
        int res=0;
        for(int i=0;i<nums.size();i+=2){res+=arr[i];}
        return res;*/
        int n[20001]={0},i=0,j=0,sum=0;
        for(i=0;i<nums.size();i++)
        n[nums[i]+10000]++;        //變相將nums按順序大小排好,并將順序存儲(chǔ)在n[i]中
        for(i=0;i<20001;)
        {
            if(n[i])
            {
                if(j%2==0) sum+=i-10000;     //按照n[i]中存儲(chǔ)的順序,求得nums[i]
                j++;                  //只有n[i]中有數(shù)時(shí),即nums存在這個(gè)數(shù)時(shí),j才增加,將j變?yōu)橄陆菢?biāo)
                n[i]--;           //此步防止nums中含有兩個(gè)相同的數(shù)
            }
            else i++;
        }
        return sum;
    }
};

Python 語(yǔ)言 - 數(shù)組拆分

解題思路

排序

今天的題目意思為:把輸入的數(shù)組拆成 nn 對(duì),將每一對(duì)的最小值求和,得到的結(jié)果最大。

從題目給出的示例入手分析:

對(duì)于示例二 [6,2,6,5,1,2] :

題目給出了最優(yōu)分法是 (2, 1), (2, 5), (6, 6),min(2, 1) + min(2, 5) + min(6, 6) = 1 + 2 + 6 = 9。

假如我們換一種分法:(2, 6), (2, 5), (1, 6),min(2, 6) + min(2, 5) + min(1, 6) = 2 + 2 + 1 = 5,則得到的最終結(jié)果會(huì)變小。

可以看出小數(shù)字組成一對(duì)、大數(shù)字組成一對(duì),每對(duì)取 minmin 之后,求和得到的結(jié)果才是最大的。

因此,思路就是對(duì)輸入的數(shù)組 numsnums 進(jìn)行排序,然后依次求相鄰的兩個(gè)元素的最小值,總和就是結(jié)果。

代碼一

一種各種語(yǔ)言都比較通用的寫(xiě)法是下面這樣,用 Python 作為示例:

class Solution(object):
    def arrayPairSum(self, nums):
        nums.sort()
        res = 0
        for i in range(0, len(nums), 2):
            res += min(nums[i], nums[i + 1])
        return res

時(shí)間復(fù)雜度:O(N * log(N)),超過(guò)了 31% 的提交。

空間復(fù)雜度:O(1)。

代碼二

對(duì)于 Python 而言,我們可以用切片操作,把代碼簡(jiǎn)化為:

class Solution(object):
    def arrayPairSum(self, nums):
        nums.sort()
        return sum(nums[::2])

時(shí)間復(fù)雜度:O(N * log(N)),超過(guò)了 100% 的提交,可見(jiàn)切片比 for 循環(huán)更快。

空間復(fù)雜度:O(N),切片操作產(chǎn)生了新的數(shù)組,占用了空間。

代碼三

對(duì)于 Python 而言,上面的代碼二還能繼續(xù)精簡(jiǎn)到一行。由于 nums.sort() 是原地操作、沒(méi)有返回值,所以我們需要用 sorted(nums) 函數(shù)返回一個(gè)新數(shù)組,我們才能在返回結(jié)果的基礎(chǔ)上繼續(xù)進(jìn)行切片。

class Solution(object):
    def arrayPairSum(self, nums):
        return sum(sorted(nums)[::2])

時(shí)間復(fù)雜度:O(N * log(N)),超過(guò)了 63% 的提交,比方法二更慢。應(yīng)該是 sorted() 函數(shù)拷貝了數(shù)組導(dǎo)致。

空間復(fù)雜度:O(N),sorted() 函數(shù)和切片操作產(chǎn)生了新的數(shù)組,占用了空間。

刷題心得

Easy 題經(jīng)常從示例入手,分析解法。

本題練習(xí)了 Python 的切片操作,也練習(xí)了兩種排序函數(shù)的寫(xiě)法。

以上就是Go語(yǔ)言題解LeetCode561數(shù)組拆分的詳細(xì)內(nèi)容,更多關(guān)于Go語(yǔ)言數(shù)組拆分的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • golang的協(xié)程上下文的具體使用

    golang的協(xié)程上下文的具體使用

    golang的context?主要用來(lái)在?goroutine?之間傳遞上下文信息,包括:取消信號(hào)、超時(shí)時(shí)間、截止時(shí)間、k-v?等,本文就詳細(xì)的來(lái)介紹一下golang的協(xié)程上下文的具體使用,感興趣的可以了解一下
    2022-04-04
  • Go語(yǔ)言實(shí)現(xiàn)支付寶支付與退款詳解

    Go語(yǔ)言實(shí)現(xiàn)支付寶支付與退款詳解

    本文詳細(xì)介紹使用Go語(yǔ)言對(duì)接支付寶支付與退款功能的步驟和注意事項(xiàng),包括PC端、WAP端和Android端支付實(shí)現(xiàn),以及退款功能的代碼實(shí)現(xiàn),介紹了GoPay庫(kù)的使用,幫助開(kāi)發(fā)者快速集成支付寶支付到應(yīng)用中
    2024-10-10
  • Go Generate 代替 Makefile使用方法詳解

    Go Generate 代替 Makefile使用方法詳解

    這篇文章主要為大家介紹了Go Generate 代替 Makefile使用方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • Golang map如何生成有序的json數(shù)據(jù)詳解

    Golang map如何生成有序的json數(shù)據(jù)詳解

    最近在學(xué)習(xí)Golang,發(fā)現(xiàn)了一個(gè)問(wèn)題,覺(jué)著有必要給大家總結(jié)下,下面這篇文章主要給大家介紹了關(guān)于Golang map如何生成有序json數(shù)據(jù)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友們下面來(lái)一起看看吧。
    2017-07-07
  • go內(nèi)存緩存BigCache之Entry封裝源碼閱讀

    go內(nèi)存緩存BigCache之Entry封裝源碼閱讀

    這篇文章主要介紹了go內(nèi)存緩存BigCache之Entry封裝源碼閱讀
    2023-09-09
  • Go語(yǔ)言使用對(duì)稱加密的示例詳解

    Go語(yǔ)言使用對(duì)稱加密的示例詳解

    在項(xiàng)目開(kāi)發(fā)中,我們經(jīng)常會(huì)遇到需要使用對(duì)稱密鑰加密的場(chǎng)景,比如客戶端調(diào)用接口時(shí),參數(shù)包含手機(jī)號(hào)、身份證號(hào)或銀行卡號(hào)等。本文將詳細(xì)講解Go語(yǔ)言使用對(duì)稱加密的方法,需要的可以參考一下
    2022-06-06
  • Golang中的信號(hào)(Signal)機(jī)制詳解

    Golang中的信號(hào)(Signal)機(jī)制詳解

    Signal 是一種操作系統(tǒng)級(jí)別的事件通知機(jī)制,進(jìn)程可以響應(yīng)特定的系統(tǒng)信號(hào),這些信號(hào)用于指示進(jìn)程執(zhí)行特定的操作,如程序終止、掛起、恢復(fù)等,Golang 的標(biāo)準(zhǔn)庫(kù) os/signal 提供了對(duì)信號(hào)處理的支持,本文將詳細(xì)講解 Golang 是如何處理和響應(yīng)系統(tǒng)信號(hào)的,需要的朋友可以參考下
    2024-01-01
  • Go語(yǔ)言的方法接受者類(lèi)型用值類(lèi)型還是指針類(lèi)型?

    Go語(yǔ)言的方法接受者類(lèi)型用值類(lèi)型還是指針類(lèi)型?

    這篇文章主要介紹了Go語(yǔ)言的方法接受者類(lèi)型用值類(lèi)型還是指針類(lèi)型?本文還同時(shí)講解了關(guān)于接受者的命名方式,需要的朋友可以參考下
    2014-10-10
  • goLang引入自定義包的方法

    goLang引入自定義包的方法

    今天小編就為大家分享一篇goLang引入自定義包的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-06-06
  • golang復(fù)用http.request.body的方法示例

    golang復(fù)用http.request.body的方法示例

    這篇文章主要給大家介紹了關(guān)于golang復(fù)用http.request.body的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-10-10

最新評(píng)論