LeetCode面試題--兩數之和
阿新 • • 發佈:2018-12-10
給定一個整數陣列和一個目標值,找出陣列中和為目標值的兩個數。 你可以假設每個輸入只對應一種答案,且同樣的元素不能被重複利用。 示例: 給定 nums = [2, 7, 11, 15], target = 9 因為 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1]
思路: 我們都知道這個題一個很簡單的思路while{while{}}的遍歷的方式,完成找到是哪兩個數之和為目標值。 我們可以首先對資料中的值經行一遍篩查,大於目標值的數,不可能是我們要找的,我們先找到這個資料的最小值,從而取得目標值-最小值,是另一個可能值的最大範圍,然後我們將這個min-max返回的值賦值一個新的陣列中。再進行查詢。這樣就優化了時間複雜度。 實現程式碼:
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int* twoSum(int* nums, int numsSize, int target) {
assert(nums);
int i=0;
int *table=(int *)malloc(sizeof(int)*numsSize);
int *pa=(int *)malloc(sizeof(int)*2);
//儲存返回的陣列值
int min=target;
int j=0 ;
int m=0;
for(i=0;i<numsSize;i++)
{
if(nums[i]<min)
min=nums[i];
}
int max=target-min;
for(i=0;i<numsSize;i++)
{
if(nums[i]<=max)
table[j++]=i;
}
for(i=0;i<j;i++)
{
for(m=i+1;m<j;m++)
if(nums[table[i]]+nums[table[m]]==target)
{
pa[0 ]=table[i];
pa[1]=table[m];
free(table);
return pa;
}
}
free(table);
return pa;
}