題目: 給定兩個數(shù)組,編寫一個函數(shù)來計算它們的交集.(來自 leecode(349) )
網(wǎng)站建設哪家好,找創(chuàng)新互聯(lián)!專注于網(wǎng)頁設計、網(wǎng)站建設、微信開發(fā)、小程序設計、集團企業(yè)網(wǎng)站建設等服務項目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了威縣免費建站歡迎大家使用!
示例 1:
輸入:nums1 = [1,2,2,1], nums2 = [2,2] 輸出:[2] 示例 2:
輸入:nums1 = [4,9,5], nums2 = [9,4,9,8,4] 輸出:[9,4]
說明:
我的解法:
題目同上,只不過在輸出的時候
輸出結(jié)果中每個元素出現(xiàn)的次數(shù),應與元素在兩個數(shù)組中出現(xiàn)的次數(shù)一致。
示例 1:
輸入:nums1 = [1,2,2,1], nums2 = [2,2] 輸出:[2,2] 示例 2:
輸入:nums1 = [4,9,5], nums2 = [9,4,9,8,4] 輸出:[9,4]
解法
如果給定的數(shù)組是排好序的,
arr1 = [1,2,3,4,4,13],arr2 = [1,2,3,9,10]
那這個返回值該如何獲取得兩個數(shù)組的交集呢?
解法
Go語言標準庫中提供了sort包對整型,浮點型,字符串型切片進行排序,檢查一個切片是否排好序,使用二分法搜索函數(shù)在一個有序切片中搜索一個元素等功能。
關于sort包內(nèi)的函數(shù)說明與使用,請查看
在這里簡單講幾個sort包中常用的函數(shù)
在Go語言中,對字符串的排序都是按照字節(jié)排序,也就是說在對字符串排序時是區(qū)分大小寫的。
二分搜索算法
Go語言中提供了一個使用二分搜索算法的sort.Search(size,fn)方法:每次只需要比較㏒?n個元素,其中n為切片中元素的總數(shù)。
sort.Search(size,fn)函數(shù)接受兩個參數(shù):所處理的切片的長度和一個將目標元素與有序切片的元素相比較的函數(shù),該函數(shù)是一個閉包,如果該有序切片是升序排列,那么在判斷時使用 有序切片的元素 = 目標元素。該函數(shù)返回一個int值,表示與目標元素相同的切片元素的索引。
在切片中查找出某個與目標字符串相同的元素索引
1、數(shù)組是多個 相同類型 的數(shù)據(jù)的組合,一個數(shù)組一旦聲明/定義了,其 長度是固定的,不能動態(tài)變化 。
2、var arr []int? ? 這時arr就是一個slice 切片 。
3、數(shù)組中的元素可以是任何數(shù)據(jù)類型,包括值類型和引用類型,但是 不能混用 。
4、數(shù)組創(chuàng)建后,如果沒有賦值,有默認值如下:
? ? 數(shù)值類型數(shù)組:????默認值為 0
? ? 字符串數(shù)組:? ? ? ?默認值為 ""
? ? bool數(shù)組:? ? ? ? ? ?默認值為 false
5、使用數(shù)組的步驟:
? ? (1)聲明數(shù)組并開辟空間
? ? (3)給數(shù)組各個元素賦值
? ? (3)使用數(shù)組
6、數(shù)組的下標是從0開始的。
7、數(shù)組下標必須在指定范圍內(nèi)使用,否則報panic:數(shù)組越界,比如var arr [5]int的有效下標為0~4.
8、Go的數(shù)組屬于 值類型 ,在默認情況下是 值傳遞 ,因此會進行值拷貝。 數(shù)組間不會相互影響。
9、如想在其他函數(shù)中去修改原來的數(shù)組,可以使用 引用傳遞 (指針方式)。
10、長度是數(shù)組類型的一部分,在傳遞函數(shù)參數(shù)時,需要考慮數(shù)組的長度,看以下案例:
題1:編譯錯誤,因為不能把[3]int類型傳遞給[]int類型,前者是數(shù)組,后者是切片;
題2:編譯錯誤,因為不能把[3]int類型傳遞給[4]int類型;
題3:編譯正確,因為[3]int類型傳給[3]int類型合法。