給定乙個整數陣列nums
和乙個目標值target
,請你在該陣列中找出和為目標值的那兩個整數,並返回他們的陣列下標。
你可以假設每種輸入只會對應乙個答案。但是,你不能重複利用這個陣列中同樣的元素。
示例:
給定 nums = [2, 7, 11, 15], target = 9
因為 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
申請記憶體
固定第乙個下標,查詢是否有滿足條件的第二個下標
找到兩個符合的下標,返回
/**
* note: the returned array must be malloced, assume caller calls free().
*/int
*twosum
(int
* nums,
int numssize,
int target,
int* returnsize)}}
return0;
}
剛開始的時候看到形參中的returnsize
,以為不是兩數之和,而是給定的某數之和,所以要實現n個for迴圈,但沒有合理規律的思路,因為一時沒想到n個for迴圈應該怎樣寫出來
然後看了下網上的解法,是直接預設returnsize
是2的,因此就不糾結直接用上述方法暴力搜尋,目前還未想到新的方式來解決
不過寫出這個解法後,發現這兩個for迴圈是有規律的,因此實現n數之和貌似也有了思路,需要用到遞迴演算法
int
digui
(int
* nums,
int numssize,
int target,
int* returnsize,
int i,
int sum,
int* values,
int* flag)
}//another time
else
//not last time
else
digui
(nums,numssize,target,returnsize,i++
,sum,values,flag);}
}return0;
}
形參中相比於原來,多了四個引數,i:表面當前處於巢狀第幾層,sum:前幾層巢狀的和,value:存放下標位址,flag:結束標誌。遞迴結束條件是最後第n個數時,總和達到要求,下面是除錯用的**
#include
#include
intdigui
(int
* nums,
int numssize,
int target,
int* returnsize,
int i,
int sum,
int* values,
int* flag)
;int
digui
(int
* nums,
int numssize,
int target,
int* returnsize,
int i,
int sum,
int* values,
int* flag)
}//another time
else
//not last time
else
digui
(nums,numssize,target,returnsize,i++
,sum,values,flag);}
}return0;
}/**
* note: the returned array must be malloced, assume caller calls free().
*/int
*nsum
(int
* nums,
int numssize,
int target,
int* returnsize)
intmain
(void);
static
int target =10;
static
int numssize =7;
static
int returnsize =3;
int* value =
nsum
(nums,numssize,target,
&returnsize)
;printf
("value are %d %d %d\n"
,value[0]
,value[1]
,value[2]
);free
(value)
;return0;
}
不過在編譯執行的時候遇到了錯誤,下面是gdb執行的提示
看提示是指標導致的問題,不過我還沒有什麼解決的方法,也不是很確定錯在了**,大家如果發現了我**錯了的麻煩留個言哈,謝謝啦
兩數之和 三數之和 四數之和
兩數之和意思就是 給你乙個陣列,從中找出兩個數字,讓他們的和等於乙個具體的target。找到所有這樣的兩個數。並且這兩個數字不能完全一樣。n數之和的意思是 給你乙個陣列,從中找出n個數字,讓他們的和等於乙個具體的target。找到所有這樣的n個數。並且這n個數字不能完全一樣。最基礎的,也是最關鍵的就...
兩數之和,三數之和
兩數之和 方法一 暴力 throw new illegalargumentexception 時間複雜度 o n 2 空間複雜度 o 1 public int twosum int nums,int target throw newillegalargumentexception no twosum...
演算法 兩數之和,三數之和,四數之和
給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。你可以假設每種輸入只會對應乙個答案。但是,你不能重複利用這個陣列中同樣的元素。示例 給定 nums 2,7,11,15 target 9 因為 nums 0 nums 1 2 ...