Leetcode 1. 兩數之和 C語言100%實現


【題目描述】

給定一個整數數組 nums和一個目標值 target,請你在該數組中找出和為目標值的那兩個整數,並返回他們的數組下標。

你可以假設每種輸入只會對應一個答案。但是,你不能重復利用這個數組中同樣的元素。

示例:

給定 nums = [2, 7, 11, 15], target = 9

因為 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]

【解題思路】

我是看的提示,知道用哈希表計算。本質還是希望通過對數組下標的直接調取,實現快速查詢。

思路大概是,將nums數組里面的值,根據取余數,對應哈希表的下表,並在hash[i]中存儲nums的下標,標明hash中此下標所對應數存在在nums中。

再通過計算target-nums[i]取余數,算出若數存在,則會存儲在哈希表哪個下標位置,再根據哈希表這個下標的值檢查此位置是否有數據。若有數據,則讀出哈希表此處的值。

容我盜大佬題解的圖……

 

 

【代碼實現】

 1 #define MAX 2000
 2 int* twoSum(int* nums, int numsSize, int target, int* returnSize){
 3     int *ret=(int *)malloc(sizeof(int) * 2);
 4     int hash[MAX];
 5     memset(hash,-1,sizeof(hash));
 6 
 7     for(int i = 0; i < numsSize; i++) {
 8         if (hash[(target - nums[i] + MAX) % MAX] != -1) {
 9             ret[0] = hash[(target - nums[i] + MAX) % MAX];
10             ret[1] = i;
11             *returnSize = 2;
12             return ret;
13         }
14         hash[(nums[i] + MAX) % MAX] = i;
15     }
16     free(hash);
17     *returnSize = 0;
18     return ret;
19 }

【BUG分析】

嗚嗚嗚我真的不熟哈希表,看懂了大佬的題解自己默寫……

bug出現在我試圖將sizeof換成MAX相關,結果發現,對於memset,第三個參數是【字節數】,也就是MAX要*4才可……

執行用時:4 ms   99.64%
內存消耗:6 MB  100%


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM