<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          兩個數(shù)組的交集?如果兩個數(shù)組是有序的呢?

          共 1285字,需瀏覽 3分鐘

           ·

          2020-03-04 23:24

          來源:小浩算法

          作者:程序員浩哥


          01題目分析


          話不多說,先看題目:

          d5af24c9c9a29fab1edad175df062928.webp第350題:給定兩個數(shù)組,編寫一個函數(shù)來計算它們的交集。0fca560f710cb3c8548cf70f5b7c5cda.webp

          給定兩個數(shù)組,編寫一個函數(shù)來計算它們的交集。


          示例 1:


          輸入: nums1 = [1,2,2,1], nums2 = [2,2]

          輸出: [2,2]

          示例 2:


          輸入: nums1 = [4,9,5], nums2 = [9,4,9,8,4]

          輸出: [4,9]

          說明:


          輸出結(jié)果中每個元素出現(xiàn)的次數(shù),應(yīng)與元素在兩個數(shù)組中出現(xiàn)的次數(shù)一致。

          我們可以不考慮輸出結(jié)果的順序。

          進階:

          如果給定的數(shù)組已經(jīng)排好序呢?你將如何優(yōu)化你的算法?

          設(shè)定兩個為0的指針,比較兩個指針的元素是否相等。如果指針的元素相等,我們將兩個指針一起向前移動,并且將相等的元素放入空白數(shù)組。


          13dd95f95238134541aad270e2fa5296.webp

          首先拿到這道題,我們基本馬上可以想到此題可以看成是一道傳統(tǒng)的映射題(map映射),為什么可以這樣看呢,因為我們需找出兩個數(shù)組的交集元素,同時應(yīng)與兩個數(shù)組中出現(xiàn)的次數(shù)一致。這樣就導(dǎo)致了我們需要知道每個值出現(xiàn)的次數(shù),所以映射關(guān)系就成了<元素,出現(xiàn)次數(shù)>。剩下的就是順利成章的解題。


          由于該種解法過于簡單,我們不做進一步分析,直接給出題解:


           1func?intersect1(nums1?[]int,?nums2?[]int)?[]int?{
          2????m0?:=?map[int]int{}
          3????for?_,?v?:=?range?nums1?{
          4????????//遍歷nums1,初始化map
          5????????m0[v]?+=?1
          6????}
          7????k?:=?0
          8????for?_,?v?:=?range?nums2?{
          9????????//如果元素相同,將其存入nums2中,并將出現(xiàn)次數(shù)減1
          10????????if?m0[v]?>?0?{
          11????????????m0[v]?-=?1
          12????????????nums2[k]?=?v
          13????????????k++
          14????????}
          15????}
          16????return?nums2[0:k]
          17}


          相信大家都能看懂!


          02題目進階


          c7df4d44bd8d8fcb6baf59e2788a369d.webp

          題目在進階問題中問道:如果給定的數(shù)組已經(jīng)排好序呢?你將如何優(yōu)化你的算法?我們分析一下,假如兩個數(shù)組都是有序的,分別為:arr1 = [1,2,3,4,4,13],arr2 = [1,2,3,9,10]


          698ae6343d524062ad538d8f50b58f21.webp


          兩個排序好數(shù)組的題,我們很容易可以想到通過雙指針的解法~

          <1>設(shè)定兩個為0的指針,比較兩個指針的元素是否相等。如果指針的元素相等,我們將兩個指針一起向前移動,并且將相等的元素放入空白數(shù)組。

          be3acab6ef013f1667ae4bf4443095b5.webp

          <2>如果兩個指針的元素不相等,我們將小的一個指針前移。

          f79fa0b40e56ccfa4510a71353b26018.webp

          <3>反復(fù)以上步驟。

          88a876613292573d5fec8e6f2a7416f7.webp

          <4>直到任意一個數(shù)組終止。

          8c6a36f3565e63c702c5488013b69b73.webp


          根據(jù)分析,我們很容易得到下面的題解:


          03題目解答


           1func?intersect(nums1?[]int,?nums2?[]int)?[]int?{
          2????i,?j,?k?:=?0,?0,?0
          3????sort.Ints(nums1)
          4????sort.Ints(nums2)
          5????for?i?len(nums1)?&&?j?len(nums2)?{
          6????????if?nums1[i]?>?nums2[j]?{
          7????????????j++
          8????????}?else?if?nums1[i]? 9????????????i++
          10????????}?else?{
          11????????????nums1[k]?=?nums1[i]
          12????????????i++
          13????????????j++
          14????????????k++
          15????????}
          16????}
          17????return?nums1[:k]
          18}


          13dd95f95238134541aad270e2fa5296.webp

          提示:解答中我們并沒有創(chuàng)建空白數(shù)組,因為遍歷后的數(shù)組其實就沒用了。我們可以將相等的元素放入用過的數(shù)組中,就為我們節(jié)省下了空間。


          推薦閱讀

          全部文章分類與整理(算法+數(shù)據(jù)結(jié)構(gòu)+計算機基礎(chǔ)),持續(xù)更新

          【吐血整理】那些讓你起飛的計算機基礎(chǔ)知識:學什么,怎么學?

          普普通通,我的三年大學

          寫公眾號15個月以來,這一路上的學習與收獲

          歷經(jīng)兩個月,我的秋招之路結(jié)束了!

          2020 第一篇原創(chuàng) | 我是如何讓自己變的更加優(yōu)秀的?

          瀏覽 38
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  成人大香蕉综合电影 | 啪啪啪大香蕉网站 | 精品无码国产片 | 国产成人在线综合豆花 | 少妇后入网址 |