兩數之和 c語言實現

2021-08-20 02:01:59 字數 841 閱讀 6149

題目描述:

給定乙個整數陣列和乙個目標值,找出陣列中和為目標值的兩個數。

你可以假設每個輸入只對應一種答案,且同樣的元素不能被重複利用。

示例:

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

因為 nums[0] + nums[1] = 2 + 7 = 9

所以返回 [0, 1]

解題思路:我原先想的是先將陣列的值儲存到乙個二維陣列中,其中第一列儲存值,第二列儲存原來陣列的下標,然後對第一列進行排序,第一列經排序後按照從小到大的順序表示,第二列儲存的還是這些值原先所對應的下標,然後我們用j從右往左開始和target進行比較,直至找到第乙個比target小的值,然後用i從左往右取值和第乙個比target小的值相加,然後和target進行比較,如果等於,則返回,如果比target小則i的值加1,如果比target大,則j的值減1。**如下:

int* twosum(int* nums, int numssize, int target) }}

for(j=numssize-1;j>=1;j--)

} return 0;

}

這個時間複雜度為o(n^2),有很多值得改進的地方,比如,在排序的時候,我選用的是氣泡排序,如果換用快速排序,則時間複雜度會降低很多,再者當我對這個有序陣列進行查詢的時候,使用的也是雙重迴圈,所以複雜度也是o(n^2),這個地方其實也是可以進行優化的。

後來想想直接來個像氣泡排序那樣的雙重迴圈,也能解決問題吧,於是就有了下面的**。

int* twosum(int* nums, int numssize, int target) }}

return 0;

兩數之和c語言實現

兩數之和c語言 你好!這是你第一次使用markdown編輯器所展示的歡迎頁。如果你想學習如何使用markdown編輯器,可以仔細閱讀這篇文章,了解一下markdown的基本語法知識。全新的介面設計,將會帶來全新的寫作體驗 在創作中心設定你喜愛的 高亮樣式,markdown將 片顯示選擇的高亮樣式進行...

兩數相加 c語言實現

給定兩個非空鍊錶來表示兩個非負整數。位數按照逆序方式儲存,它們的每個節點只儲存單個數字。將兩數相加返回乙個新的鍊錶。你可以假設除了數字 0 之外,這兩個數字都不會以零開頭。示例 輸入 2 4 3 5 6 4 輸出 7 0 8 原因 342 465 807 解題思路 我先開始的思路是,再建立乙個返回鍊...

兩數之和 C語言

示例 給定 nums 2,7,11,15 target 9 因為 nums 0 nums 1 2 7 9 所以返回 0,1 在呼叫函式時,如果返回值如果是乙個常量則沒問題。如果返回值若為指標則可能會出現該錯誤,假如返回的指標位址指向函式內的區域性變數,在函式退出時,該變數的儲存空間會被銷毀,此時去訪...