成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

go語言求解兩數(shù)之和的簡單介紹

利用go語言實現(xiàn)求數(shù)組交集的算法

題目: 給定兩個數(shù)組,編寫一個函數(shù)來計算它們的交集.(來自 leecode(349) )

在睢陽等地區(qū),都構建了全面的區(qū)域性戰(zhàn)略布局,加強發(fā)展的系統(tǒng)性、市場前瞻性、產品創(chuàng)新能力,以專注、極致的服務理念,為客戶提供網(wǎng)站建設、成都網(wǎng)站設計 網(wǎng)站設計制作按需求定制網(wǎng)站,公司網(wǎng)站建設,企業(yè)網(wǎng)站建設,成都品牌網(wǎng)站建設,網(wǎng)絡營銷推廣,成都外貿網(wǎng)站建設公司,睢陽網(wǎng)站建設費用合理。

示例 1:

輸入:nums1 = [1,2,2,1], nums2 = [2,2] 輸出:[2] 示例 2:

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

說明:

我的解法:

題目同上,只不過在輸出的時候

輸出結果中每個元素出現(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小知識新解

1、值接收者和指針接收者

所謂指針接收者和值接收者這兩個概念,用GO寫了一陣子代碼的人都了解了,這里只做簡要說明一下,也就是對于一個給定結構,咱們對結構進行方法包裝的時候,固定必傳的參數(shù),用來指向這個對象結構自身的一個參數(shù),在go中也就是形式如下:

我們對結構體testStruct進行了包裝,提供了兩個方法,sum和modify,其中sum的方法接收者為a testStruct,這個就是值接收者,而modify的接收者為a *testStruct就是指針接收者,也就是說固定對象指針,一個傳遞的是指針地址,而另外一個直接傳遞的是結構值拷貝了

對指針有一定了解的,都可以知道,指針傳遞過去的,可以直接修改結構內部內容,而值傳遞過去的,無論如何修改這個接收者的數(shù)據(jù),不會對原對象結構產生影響。而對于咱們包裝結構對象的時候,到底是使用指針還是使用值接收者,這個實際上沒有太大的定論,就我個人的觀點來說,如果結構體占有的內存空間不大(kb級別),而又不需要修改內部的,同時結構對象內部沒有同步對象比如(sync包中的mutex,rwlock,waitgroup等之類的結構的話,可以直接值傳遞,實際上值copy也沒有咱們想象的那么慢,很多時候,都用指針,最后的gc回收掃描可能都比咱們這個傳遞copy的消耗大) p="" /kb級別),而又不需要修改內部的,同時結構對象內部沒有同步對象比如(sync包中的mutex,rwlock,waitgroup等之類的結構的話,可以直接值傳遞,實際上值copy也沒有咱們想象的那么慢,很多時候,都用指針,最后的gc回收掃描可能都比咱們這個傳遞copy的消耗大)

2、實現(xiàn)接口的值接收者和指針接收者有啥區(qū)別

也就是比如定義如下

這里面的值接收者和指針接收者有什么區(qū)別,這里咱來寫一個測試

通過這個測試用例可以發(fā)現(xiàn),指針接收者實現(xiàn)的接口可以同時支持轉移到值接收者接口和指針接收者接口,而用值接收者實現(xiàn)的接口,則無法轉移到使用指針接收者實現(xiàn)的接口,為啥子呢?目前網(wǎng)上或者各類資料上都是給的一個很官方很官方,而且很書面話難以理解的說明,大致意思如下:

這是目前網(wǎng)絡或者各種資料上都是差不多是這樣說的,看似講了,實際上就說了一個結果,根本就沒說出來一個為什么。這樣的總結出來,一個初學者的角度來看,是很不好理解的,初學者要么就是死記硬背,要么就是生搬硬套,甚至直到寫了好多好多代碼了,都還沒有搞明白一個為啥子,只是會用了而已,從長遠來說這是不利于自身提高的。

有這兩個本質點,咱們自己來思考一下,如果你來實現(xiàn)這個編譯器的時候,用指針接收的時候,指針接收者,默認就能直接獲取支持,而值接收者實現(xiàn)接口的咱們可以直接來一個解指針就變成了值,就能匹配上值接收者實現(xiàn)的接口了,反過來說,如果值接收者,此時要匹配指針接收者,如何匹配呢,取一個地址就變成了指針了,此時數(shù)據(jù)類型確實是匹配了,但是,地址指向的數(shù)據(jù)區(qū)不對了,因為我們剛剛說了值接收者拷貝了一個新值之后是完全的一個新的對象,這個新對象和原始對象一點關系都沒有,咱們取地址,取的也是這個新對象地址,對這個地址進行操作,也是這個新對象的內部數(shù)據(jù),和原始數(shù)據(jù)內部沒有任何關系,所以由此就能推斷出,這個是為啥子值接收者不能匹配上指針接收者,而指針接收者卻可以匹配上值接收者了。

1、在某個作用域內部,所有定義的字符串的數(shù)據(jù)區(qū)相同

這個很好驗證,代碼如下:

2、字符串相加會產生一個新串

這個也很好驗證

3、字符串真的是不可變的嗎

實際上從字符串的結構

從這個結構,就能大致的推斷出來,字符串設計成這樣就不具備直接擴容+來增加新數(shù)據(jù),而如果咱們直接使用string[index] = 'a',用這種方式,就不能編譯通過,官方也確定說字符串是不可變的。那么真的是不可變的嗎?

通過上面的結構,在加上go的slice切片的數(shù)據(jù)結構

由此可見,咱們可以將字符串通過指針方式強轉為一個byte數(shù)組指針,然后通過byte切片來修改,試試

編譯通過,運行報錯

unexpected fault address 0xae2e27

fatal error: fault

這個錯誤,基本上就是一個內存的保護錯誤,是寫異常,所以說明了,這個肯定做了內存寫保護,那么直接修改一下內存區(qū)的屬性,去掉他的寫保護,就能寫了

以下代碼都是在Win平臺,Go1.18,Win上修改內存權限屬性,使用VirtualProtect,代碼如下

此時運行,就能發(fā)現(xiàn)tstr的內容被咱們變了,這種情況實際上在實際開發(fā)中不具有實際意義,因為本身在語言層面,已經(jīng)做了層層限制,咱們這是屬于非法強制的操作方式,是流氓行為,那么是否有比較溫和一點的操作方式呢?答案是有的,且往下看。

通過上面,我們已經(jīng)用到了字符串結構,切片結構,要想字符串內容可變,那么咱們自己構造字符串的數(shù)據(jù)內容區(qū)域,且讓這個數(shù)據(jù)區(qū)木有內存寫保護不就行了,內容區(qū)可變,GO原生態(tài)的byte數(shù)組不就行嘛,所以咱們自己構造一下

此時我們直接修改buffer的內容,就是直接修改了str的數(shù)據(jù)內容了。而又不會像前面的一樣遇到內存寫保護

4、字符串轉換優(yōu)化時可能碰到的坑

通過前面討論的字符串的可變性的方法,咱們可以知道,很多時候,[]byte到字符串的轉變,可以直接構造其結構,而共享數(shù)據(jù),從而達到減少數(shù)據(jù)內存copy的方式來進行優(yōu)化,再使用這些優(yōu)化的時候,一定需要注意,字符串或者數(shù)組的生命周期,是否會存在被改寫的情況,從而導致前后不一致的問題。

比如下面這段代碼:

大家可以猜想一下,這個最后里面的數(shù)據(jù)mmp中,"test"的value是多少,"abcd"的value是多少,然后想想為什么,且等端午之后,再來分解

go語言:數(shù)組

數(shù)組是一個由 固定長度 的 特定類型元素 組成的序列,一個數(shù)組可以由零個或多個元素組成。 數(shù)組是值類型

數(shù)組的每個元素都可以通過索引下標來訪問,索引下標的范圍是從0開始到數(shù)組長度減1的位置,內置函數(shù) len() 可以返回數(shù)組中元素的個數(shù)。

2.類型的打印,結果的第二種打印方式

3.對元素的修改或者賦值

4.判斷數(shù)組是否相等:長度、類型

4.數(shù)組的地址:連續(xù)存儲的空間

5.數(shù)組的賦值、地址、取值

6.數(shù)組的默認值

7.數(shù)組的初始化

8.數(shù)組的逆置

9.求數(shù)組的最大值、最小值、平均值

10.對數(shù)組字符串進行連接

11.冒泡排序法的實現(xiàn)

12.數(shù)組做函數(shù)的參數(shù)

13.二維數(shù)組:賦值和地址

14.二維數(shù)組:打印和輸出

15. 指針數(shù)組,每一個元素都是地址

17.數(shù)組的內存分配

兩數(shù)之和(golang)

關聯(lián): 兩數(shù)之和 II - 輸入有序數(shù)組(golang)

兩數(shù)之和 IV - 輸入 BST(golang)

Go語言 斐波那契數(shù)列的解法

這么寫效率很低,沒有剪枝,存在大量的重復計算。

反正你測試用例是有限的,那我騙過你的測試用例就行了啊;)

網(wǎng)站標題:go語言求解兩數(shù)之和的簡單介紹
當前鏈接:http://jinyejixie.com/article28/hsoijp.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站排名品牌網(wǎng)站設計、App設計、網(wǎng)頁設計公司、動態(tài)網(wǎng)站、靜態(tài)網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

營銷型網(wǎng)站建設
阳新县| 甘德县| 得荣县| 连云港市| 抚顺市| 宿迁市| 织金县| 台中县| 连平县| 文登市| 将乐县| 宿迁市| 离岛区| 黑水县| 仪征市| 平凉市| 宁海县| 康乐县| 静安区| 鄯善县| 颍上县| 民权县| 日土县| 盐源县| 沙田区| 马公市| 手游| 安阳市| 台江县| 海晏县| 哈巴河县| 通许县| 平阳县| 浦城县| 济宁市| 宜宾市| 北碚区| 全椒县| 游戏| 大姚县| 浠水县|