leetcode (15) - 3sum

void sort(int *a, int left, int right)
{
	if(left >= right)
	{
		return ;
	}
	int i = left;
	int j = right;
	int key = a[left];

	while(i < j)                              
	{
		while(i < j && key <= a[j])
		{
			j--;
		}

		a[i] = a[j];

		while(i < j && key >= a[i])
		{
			i++;
		}

		a[j] = a[i];
	}

	a[i] = key;
	sort(a, left, i - 1);
	sort(a, i + 1, right);

} 

int** threeSum(int* nums, int numsSize, int* returnSize) {
	sort(nums, 0, numsSize-1);
	int result = 0;
	int target = 0;
	int** rets = (int**)malloc(sizeof(int*)*numsSize*2);
	int index = 0;
	int is_exist = 0;
	for (int i=0; i< numsSize-2; ++i)
	{
		int j = i+1;
		int k = numsSize - 1;
		while(j < k){
			result = nums[i]+nums[j]+nums[k];
			if (result < target)
			{
				++j;
			}else if (result > target)
			{
				--k;
			}else {
				for (int p=0; p< index; ++p)
				{
					if (rets[p][0] == nums[i]&&rets[p][1] == nums[j])
					{
						is_exist = 1;
						break;
					}
				}
				if (is_exist == 0)
				{
					rets[index] = (int*)malloc(sizeof(int)*3);
					rets[index][0] = nums[i];
					rets[index][1] = nums[j];
					rets[index][2] = nums[k];
					++index;
				}

				is_exist = 0;
				--k;
			}
		}
	}
	*returnSize = index;
	return rets;
}





發佈了23 篇原創文章 · 獲贊 19 · 訪問量 42萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章