C实现 LeetCode->3Sum
来源:互联网 发布:知其所以然的意思 编辑:程序博客网 时间:2024/04/30 01:12
Given an array S of n integers, are there elements a, b, c in S such that a + b + c = 0? Find all unique triplets in the array which gives the sum of zero.
1:给定一个 整形数组S 里面的元素 满足 a+b+C =0 ;
2:满足a<= b <= c 排序
//// 3Sum.c// Algorithms//// Created by TTc on 15/6/12.// Copyright (c) 2015年 TTc. All rights reserved.//#include "3Sum.h"#include <stdlib.h>#include <string.h>/** * 三元素(a,b,c)必须排序。(a≤b≤c) 解集必须不包含重复的三元素。 */static intcmp(const int*a,const int *b){ return *a - *b;}/** * Return an array of arrays of size *returnSize. * Note: The returned array must be malloced, assume caller calls free(). */int**threeSum(int* nums, int numsSize, int* returnSize){ if (numsSize <= 0) return NULL; int total = 64; int size = 0; int i,start,end,sum; int ** result = (int **)malloc(sizeof(int *) * total); for(i = 0 ;i< total; i++){ result[i] = (int *)malloc(sizeof(int)* 3); } qsort(nums, numsSize, sizeof(int), (int(*)(const void *,const void *))cmp); for(i = 0; i < numsSize-2; ++i){ if(i > 0 && nums[i] == nums[i-1]){ continue; } start = i + 1; end = numsSize - 1; while(start < end){ sum = nums[i] + nums[start] + nums[end]; if(sum == 0){ if(size > 0 && result[size-1][0] == nums[i] && result[size-1][1] == nums[start] && result[size-1][2] == nums[end]){ ++start; --end; continue; } result[size][0] = nums[i]; result[size][1] = nums[start]; result[size][2] = nums[end]; size++; if(size == total){ total <<= 1; int t; result = (int **)realloc(result,sizeof(int *) * total); for(t = size; t < total; ++t) result[t] = (int *)malloc(sizeof(int) * 3); } ++start; --end; } else if(sum > 0){ --end; }else{ ++start; } } } *returnSize = size; return result;}voidtest_3Sum(){ int nums[10] = {-1, 0 ,1 ,2 ,-1, -4}; int * returnSize = NULL; returnSize = malloc(sizeof(int)); int ** result = threeSum(nums, 6, returnSize); printf("returnSize===%d \n",*returnSize); for (int j = 0; j < *returnSize; j++) { for (int i = 0 ; i < 3; i++) { printf("result[%d][%d]===%d \n",j,i,result[0][i]); } }}
0 0
- C实现 LeetCode->3Sum
- C实现 LeetCode->4Sum
- [LeetCode]1 Two Sum(C++,Python实现)
- 【Leetcode】【Python】【C++】1. Two Sum实现
- LeetCode-1-Two Sum(C语言实现)
- LeetCode 1. Two Sum(c语言实现)
- [C++]LeetCode: 70 3Sum
- leetcode 3sum c语言
- Leetcode c语言-3Sum
- 【leetcode】3SUM python实现
- leetcode刷题系列C++-3sum
- Leetcode c语言-3Sum Closest
- 【LeetCode算法练习(C++)】3Sum
- 【Leetcode】3Sum (Sum)
- LeetCode 3Sum Closest JS实现
- [leetcode]15. 3Sum(Java实现)
- 【C++】【LeetCode】15. 3Sum & 16. 3Sum Closest & 18. 4Sum
- LeetCode 15 3Sum (C,C++,Java,Python)
- Android调用天气预报所对应的城市Id
- ubuntu12.4交叉编译vlc2.2.1的经历
- 解决Fragment中使用ViewPager时,ViewPager里的Fragment错位和空白问题。
- EndNote导入万方论文方法
- 455A Boredom
- C实现 LeetCode->3Sum
- 常用网站
- 适配器详解
- JAVA -- Exception 类型
- 编写语法分析程序
- 第三章 30题
- 使用Pyjnius 从python调用自定义Java方法
- 谷歌国内镜像地址
- FragmentPagerAdapter与FragmentStatePagerAdapter区别