欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

一 描述

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

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

返回該 最大總和 。

示例 1:

輸入:nums = [1,4,3,2]
輸出:4
解釋:所有可能的分法(忽略元素順序)為:
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
解釋:最優(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ì)思路是將整個隊列按從小到大的方式排序,然后從兩個相近的數(shù)中選取出最小的,取和。使用冒泡法會超出計算時間,因為選用額外增加數(shù)組,將大小作為兩個數(shù)組的下角標,從而進行排序。

三 答案

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;}   //冒泡排序會超出時間限制
        }
        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按順序大小排好,并將順序存儲在n[i]中
        for(i=0;i<20001;)
        {
            if(n[i])
            {
                if(j%2==0) sum+=i-10000;     //按照n[i]中存儲的順序,求得nums[i]
                j++;                  //只有n[i]中有數(shù)時,即nums存在這個數(shù)時,j才增加,將j變?yōu)橄陆菢?
                n[i]--;           //此步防止nums中含有兩個相同的數(shù)
            }
            else i++;
        }
        return sum;
    }
};

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

解題思路

排序

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

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

對于示例二 [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é)果會變小。

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

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

代碼一

一種各種語言都比較通用的寫法是下面這樣,用 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

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

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

代碼二

對于 Python 而言,我們可以用切片操作,把代碼簡化為:

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

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

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

代碼三

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

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

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

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

刷題心得

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

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

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

相關(guān)文章

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

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

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

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

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

    Go Generate 代替 Makefile使用方法詳解

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

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

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

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

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

    Go語言使用對稱加密的示例詳解

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

    Golang中的信號(Signal)機制詳解

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

    Go語言的方法接受者類型用值類型還是指針類型?

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

    goLang引入自定義包的方法

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

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

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

最新評論