最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

go語(yǔ)言的四數(shù)相加等于指定數(shù)算法

 更新時(shí)間:2021年04月27日 10:47:32   作者:力扣(LeetCode)  
這篇文章主要介紹了go語(yǔ)言的四數(shù)相加等于指定數(shù)算法的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧

給定四個(gè)包含整數(shù)的數(shù)組列表 A , B , C , D ,計(jì)算有多少個(gè)元組 (i, j, k, l) ,使得 A[i] + B[j] + C[k] + D[l] = 0。

首先將四個(gè)數(shù)組分割為兩兩數(shù)組,前兩個(gè)數(shù)組值相加,后兩個(gè)數(shù)組相加,入股前兩個(gè)數(shù)組相加和與后兩個(gè)數(shù)組相加和正好為相反數(shù),四個(gè)元素之和為0.

首先:

將兩數(shù)組的元素進(jìn)行遍歷相加,相加之和為map的索引。所指向的元素,就是出現(xiàn)的次數(shù)。

func foursumcount(A []int, B []int, C []int, D []int) int{
 des :=map[int]int{}
 for _,v:=range A{
  for _,w:=range B{
   des[v+w]++
  }
 }
}

再次遍歷另兩個(gè)數(shù)組,將兩個(gè)數(shù)組的元素進(jìn)行相加,取和的相反數(shù),通過(guò)使用相反數(shù)在map中查找,如果沒(méi)出現(xiàn),所指向的數(shù)是0,如果出現(xiàn)過(guò)這個(gè)數(shù)的相反數(shù),則所指向的數(shù)大于一。

func foursumcount(A []int, B []int, C []int, D []int) int{
 des :=map[int]int{}
 ans:=0
 for _,v:=range C{
  for _,w:=range D{
   ans +=des[-v-w]
  }
 }
}

最后將總數(shù)返回

全部代碼

func fourSumCount(A []int, B []int, C []int, D []int) int {
 des := map[int]int{}
 ans:=0
 for _,v :=range A{//遍歷兩個(gè)數(shù)組,將兩個(gè)數(shù)組的和作為一個(gè)索引,進(jìn)行+1操作
  for _,w:=range B{
    des[v+w]++
  }
 }
 for _,v :=range C{//遍歷另兩個(gè)數(shù)組,如果這兩個(gè)數(shù)組進(jìn)行相加的和的相反數(shù)在map中不為1,則證明出現(xiàn)過(guò)
  for _,w:=range D{
   ans +=des[-v-w]
  }
 }
 return ans//返回總數(shù)
}

補(bǔ)充:算法題:三個(gè)數(shù)相加等于某個(gè)特定值

題目來(lái)自于leetcode第十五題

給定一個(gè)n個(gè)整數(shù)的數(shù)組S,是否存在S中的元素a,b,c,使得a + b + c = 0? 查找數(shù)組中所有唯一的三元組,它們的總和為零。

注意:解決方案集不能包含重復(fù)的三元組。

例子:

給定數(shù)組:

S = [-1, 0, 1, 2, -1, -4]

解決方案:

[[-1, 0, 1],[-1, -1, 2]]

在剛看到這道題目的題目的時(shí)候,首先想到的就是暴力解法,將數(shù)組排序后直接嵌套三個(gè)循環(huán),這樣子雖然簡(jiǎn)單,但是時(shí)間復(fù)雜度確實(shí)n^3,遇到數(shù)據(jù)量過(guò)大的時(shí)候消耗太大,提交的時(shí)候并沒(méi)有通過(guò)。

自己在想了一段時(shí)間后想到了一些優(yōu)化方案,但是本質(zhì)上都沒(méi)有將次方縮減,所以仍然需要改進(jìn),目標(biāo)為n^2。

首先,目標(biāo)為n^2的話,就需要將數(shù)組掃描兩遍,第一層循環(huán)沒(méi)有問(wèn)題,但要將第二層和第三層循環(huán)縮減為掃描一遍,因?yàn)槭且獙蓚€(gè)數(shù)相加等于某個(gè)值,所以可將有序數(shù)組分別從前往后和從后往前掃描,直至碰頭,碰頭后如果繼續(xù)循環(huán)的話,所得到的結(jié)果會(huì)重復(fù),

所以到碰頭后可以跳出循環(huán)。這樣子只需要掃描數(shù)組一遍就可達(dá)到兩層循環(huán)的結(jié)果。思路簡(jiǎn)單是這樣,在實(shí)現(xiàn)的時(shí)候要考慮一些其他的問(wèn)題,具體實(shí)現(xiàn)的代碼如下:

public class Solution {
    public List<List<Integer>> threeSum(int[] nums) {
        List<List<Integer>> result = new LinkedList<List<Integer>>();
        if(nums.length<3){
            return result;
        }
        Arrays.sort(nums);
        int left=0,right=nums.length-1;
        for(int mid=0;mid< nums.length-2;mid++){
            if(nums[mid]>0) break;
            if(mid == 0 || (mid > 0 && nums[mid] != nums[mid-1])){
                left=mid+1;
                right=nums.length-1;
                while(left<right){
                    if(nums[left]+nums[mid]+nums[right] ==0){
                        result.add(Arrays.asList(nums[mid],nums[left],nums[right]));
                        while (left < right && nums[left] == nums[left+1]) left++;
                        while (left < right && nums[right] == nums[right-1]) right--;
                        left++;
                        right--;
                    }else if(nums[left]+nums[mid]+nums[right]<0){
                        left++;
                    }else if(nums[left]+nums[mid]+nums[right]>0){
                        right--;
                    }
                }
            }
        }
        return result;
    }
}

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。

相關(guān)文章

  • Golang中make與new使用區(qū)別小結(jié)

    Golang中make與new使用區(qū)別小結(jié)

    Go語(yǔ)言中new和make是內(nèi)建的兩個(gè)函數(shù),主要用來(lái)創(chuàng)建分配類(lèi)型內(nèi)存,本文主要給大家介紹了Go語(yǔ)言中函數(shù)new與make的使用和區(qū)別,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-01-01
  • Golang實(shí)現(xiàn)Mongo數(shù)據(jù)庫(kù)增刪改查操作

    Golang實(shí)現(xiàn)Mongo數(shù)據(jù)庫(kù)增刪改查操作

    本文主要介紹了Golang實(shí)現(xiàn)Mongo數(shù)據(jù)庫(kù)增刪改查操作,我們使用了 MongoDB的官方Go驅(qū)動(dòng)程序,實(shí)現(xiàn)了插入、查詢(xún)、更新和刪除操作,感興趣的可以了解一下
    2024-01-01
  • go語(yǔ)言中反射機(jī)制的三種使用場(chǎng)景

    go語(yǔ)言中反射機(jī)制的三種使用場(chǎng)景

    本文主要介紹了go語(yǔ)言中反射機(jī)制的三種使用場(chǎng)景,包括JSON解析、ORM框架和接口適配,具有一定的參考價(jià)值,感興趣的可以了解一下
    2025-02-02
  • golang 使用time包獲取時(shí)間戳與日期格式化操作

    golang 使用time包獲取時(shí)間戳與日期格式化操作

    這篇文章主要介紹了golang 使用time包獲取時(shí)間戳與日期格式化操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-12-12
  • Go設(shè)計(jì)模式之單例模式講解和代碼示例

    Go設(shè)計(jì)模式之單例模式講解和代碼示例

    單例是一種創(chuàng)建型設(shè)計(jì)模式,讓你能夠保證一個(gè)類(lèi)只有一個(gè)實(shí)例,并提供一個(gè)訪問(wèn)該實(shí)例的全局節(jié)點(diǎn),本文就通過(guò)代碼示例給大家講講Go單例模式,需要的朋友可以參考下
    2023-07-07
  • Go語(yǔ)言中的網(wǎng)絡(luò)編程實(shí)現(xiàn)方式

    Go語(yǔ)言中的網(wǎng)絡(luò)編程實(shí)現(xiàn)方式

    Go語(yǔ)言作為一種簡(jiǎn)潔而強(qiáng)大的編程語(yǔ)言,在網(wǎng)絡(luò)編程方面表現(xiàn)尤為出色,其內(nèi)置的net包提供了豐富的網(wǎng)絡(luò)I/O基礎(chǔ)設(shè)施,支持TCP、UDP協(xié)議,以及DNS解析等功能,本文將結(jié)合實(shí)際案例,詳細(xì)介紹Go語(yǔ)言在網(wǎng)絡(luò)編程中的詳細(xì)用法,需要的朋友可以參考下
    2024-10-10
  • Golang 實(shí)現(xiàn)超大文件讀取的兩種方法

    Golang 實(shí)現(xiàn)超大文件讀取的兩種方法

    這篇文章主要介紹了Golang 實(shí)現(xiàn)超大文件讀取的兩種方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-04-04
  • golang中為什么不存在三元運(yùn)算符詳解

    golang中為什么不存在三元運(yùn)算符詳解

    這篇文章主要給大家介紹了關(guān)于golang中為什么不存在三元運(yùn)算符的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • Golang運(yùn)行報(bào)錯(cuò)找不到包:package?xxx?is?not?in?GOROOT的解決過(guò)程

    Golang運(yùn)行報(bào)錯(cuò)找不到包:package?xxx?is?not?in?GOROOT的解決過(guò)程

    這篇文章主要給大家介紹了關(guān)于Golang運(yùn)行報(bào)錯(cuò)找不到包:package?xxx?is?not?in?GOROOT的解決過(guò)程,文中通過(guò)圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2022-07-07
  • Golang多線程爬蟲(chóng)高效抓取大量數(shù)據(jù)的利器

    Golang多線程爬蟲(chóng)高效抓取大量數(shù)據(jù)的利器

    Golang多線程爬蟲(chóng)是一種高效抓取大量數(shù)據(jù)的利器。Golang語(yǔ)言天生支持并發(fā)和多線程,可以輕松實(shí)現(xiàn)多線程爬蟲(chóng)的開(kāi)發(fā)。通過(guò)使用Golang的協(xié)程和通道,可以實(shí)現(xiàn)爬蟲(chóng)的高效并發(fā)抓取、數(shù)據(jù)處理和存儲(chǔ)
    2023-05-05

最新評(píng)論

江门市| 昌邑市| 乐陵市| 桂林市| 甘洛县| 浏阳市| 合肥市| 图木舒克市| 吐鲁番市| 义乌市| 宝兴县| 房山区| 浠水县| 满洲里市| 宁明县| 大城县| 应用必备| 巫山县| 新田县| 平果县| 广水市| 怀远县| 黎城县| 峨边| 永清县| 江城| 榆中县| 石柱| 贵州省| 城步| 延庆县| 城固县| 崇仁县| 文化| 鹤壁市| 浠水县| 临城县| 徐闻县| 泽州县| 肇庆市| 南皮县|