1. 程式人生 > >LeetCode面試題--兩數之和

LeetCode面試題--兩數之和

給定一個整數陣列和一個目標值,找出陣列中和為目標值的兩個數。 你可以假設每個輸入只對應一種答案,且同樣的元素不能被重複利用。 示例: 給定 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; }