1. 程式人生 > >LeetCode:兩數之和

LeetCode:兩數之和

https://leetcode-cn.com/problems/two-sum/description/

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

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

示例:

給定 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 i,j;
	int *ans= (int *)malloc(sizeof(int)*2);         //申請所需空間
	for(i=0;i<numsSize;i++)
	{
		for(j=0;j<i;j++)
			if(nums[i]+nums[j]==target)     //找到兩數之和為target
			{
				ans[0]=j;
				ans[1]=i;                 //將數存入
				return ans;                 
			}		
	}  
    return NULL;                                        //沒有找到答案返回空
}

複雜度分析:

  • 時間複雜度:O(n2)O(n^2)O(n2), 對於每個元素,我們試圖通過遍歷陣列的其餘部分來尋找它所對應的目標元素,這將耗費 O(n)O(n)O(n) 的時間。因此時間複雜度為 O(n2)O(n^2)O(n2)。

  • 空間複雜度:O(1)O(1)O(1)。