1. 程式人生 > >leetcode.1

leetcode.1

適用於 個數 等於 pos all malloc mss 一次 int

首先想到的是用兩個for循環找到兩個數,但這樣的時間復雜度是O(n^2)

代碼如下:

int* twoSum(int* nums, int numsSize, int target) 
{
    int i,j;
    int *a = (int*)malloc(2 * sizeof (int));
    for(i=0;i<numsSize;i++)
    {
for(j=i+1;j<numsSize;j++) { if(nums[i]+nums[j]==target) { a[
0]=i; a[1]=j; return a; } } } return NULL; }

如果采用hash表,先存儲每個數的下表,然後通過一次循環,判斷(target-數1)是否存在。用空間換時間。

這個代碼只適用於非負數:

int* twoSum(int* nums, int numsSize, int target) 
{
    int i,j;
    int temp;
    int *a = (int*)malloc(2 * sizeof
(int)); int b[1000]; for(i=0;i<numsSize;i++) { b[i]=-1; } //將數組b全部置-1 for(i=0;i<numsSize;i++) { b[nums[i]]=i; } //將nums保存在b中,坐標為(num[i]),值為序號 for(i=0;i<numsSize;i++) { temp=target-nums[i];//temp=目標值-數值1 if( i!=b[temp] && b[temp]!=-1
)//大於1個數並且不等於-1 { a[0]=i;//序號1 a[1]=b[temp];//序號2 return a; } } return NULL; }

leetcode.1