大家好呀,這裏是獨立遊戲開發新人題語的算法小課堂。
嗯,最近呢在籌備自己的第一款獨立遊戲(但大部分地方都還剛剛起步,等到完成還要好久好久呢),想是提前積累積累寫專欄的經驗嘛。
所以呢,就從我接觸比較多的算法開始啦,希望能幫助到大家啊。
之後,可能也會增加開發相關的專欄(畫個大餅先hhh),也請各位大佬前輩們多多指教啊。
提前說明一下題目來源均是力扣,有興趣的盒友也可以去看看啊。
主要本人最近也在準備408的考研,所以題解均主要使用C語言,後續也可能會添加其他語言,還望盒友們海涵。
嗯,下面我們就開始吧。今天是一道關於數組操作的簡單題,兩數之和。
題目要求
接下來是我們需要補全的函數。
待補全的函數
開始解題!
首先,我們觀察需要補全函數的輸入與輸出,可以發現輸入從左到右分別爲 輸入的整數數組nums,輸入的整數數組的大小numsSize,整數目標值target,返回數組的大小returnSize;輸出爲返回的目標數組。
第一種方法暴力求解,雙循環。
看完了函數的輸入和返回值後,我們再來看題目對應的解題要求,需要找出和爲目標值的兩個整數。
我們可以很容易想到一種時間複雜度較高的暴力求解方法,就是將輸入的整數數組中每種元素的組合都逐一都列出,直至找到和爲目標值的組合後,返回組合數組。
根據以上思想,我們就可以構建出整體代碼。
首先,申請我們需要返回的數組的空間
申請空間
然後,因爲需要找出整數數組中每種元素的組合,我們可以構建一個雙循環的結構
雙循環結構
爲什麼j需要等於i + 1呢?主要呢是爲了防止組合出現重複以及組合中的元素出現重複。
好了,我們已經成功找到了所有的組合。接下來,我們就應該來書寫判斷條件啦,就是我們需要去思考什麼時候返回我們正確的組合,以及停止函數的運行。
這時候呢我們就可以在雙循環中加入判斷條件,如果兩個整數的和爲目標值時,就對數組進行賦值,並返回,否則繼續循環
加入判斷條件
現在,我們已經完成大部分代碼了,加油,還差一點兒。我們的代碼是不是還少了些什麼?如果在兩個循環結束時都沒有找到和爲目標值的兩個整數,那麼我們這個函數是不是就會出錯,因爲這時候該函數沒有返回值了。
所以呢爲了解決這個問題,我們就可以在函數的末尾加入返回值,一個是表明返回0個整數的整形指針,一個是NULL代表沒有返回值,也就是沒有找到目標組合
循環結束後的返回值
最終代碼如下
最終代碼
因爲在該算法中需要進行雙重循環遍歷,所以時間複雜度爲O(n^2),又因爲該代碼運行過程中所需的額外存儲空間是固定的,與輸入數據的規模無關,所以空間複雜度爲O(1)。
在 C 語言中,指針的算術運算(如 + -)是基於指針所指向的數據類型大小的,而不是直接操作字節數。
接下來呢,還存在第二種方法。
就是以空間換時間,建立哈希表,將已經遍歷的元素存入,後續遍歷的元素到哈希表中尋找是否存在匹配的元素,若存在返回,若不存在也存入哈希表後繼續遍歷,直置有返回或遍歷結束。
第二種因爲需要應用到哈希表,會在後序的題目中進行詳細的講解,故在此便不展開哩。
使用該方法的時間空間複雜度均爲O(n)。
好了,這道題目就到此結束啦,有什麼問題和疑問呢歡迎熱心的盒友們提出啊。
更多遊戲資訊請關註:電玩幫遊戲資訊專區
電玩幫圖文攻略 www.vgover.com