C语言刷2数/3数/4数之和
15. 三数之和
/**
* Return an array of arrays of size *returnSize.
* The sizes of the arrays are returned as *returnColumnSizes array.
* Note: Both returned array and *columnSizes array must be malloced, assume caller calls free().
*/ int Cmp(const void *a,const void *b){
return *(int*)a - *(int*)b;
} int** threeSum(int* nums, int numsSize, int* returnSize, int** returnColumnSizes)
{
*returnSize = 0;
if (numsSize < 3) {
return NULL;
} qsort(nums, numsSize, sizeof(int), Cmp); int k, i, j, sum;
int **res = (int **)malloc(sizeof(int *) * 20000);
*returnColumnSizes = (int *)malloc(sizeof(int) * 20000);
for (k = 0; k < numsSize - 2; k++) {
if (nums[k] > 0) {
return res;
}
if (k > 0 && nums[k] == nums[k - 1]) {
continue;
}
i = k + 1;
j = numsSize - 1;
while (i < j) {
sum = nums[k] + nums[i] + nums[j];
if (sum == 0) {
// printf("k:%d, i:%d, j:%d, *returnSize:%d\n", k, i, j, *returnSize);
res[*returnSize] = (int *)malloc(sizeof(int) * 3);
(*returnColumnSizes)[*returnSize] = 3;
res[*returnSize][0] = nums[k];
res[*returnSize][1] = nums[i];
res[*returnSize][2] = nums[j];
*returnSize += 1;
// printf("1 i:%d, j:%d\n", i, j);
// 更新和去重
while(i < j && nums[i] == nums[++i]) {
}
// printf("2 i:%d, j:%d\n", i, j);
// 更新和去重
while(i < j && nums[j] == nums[--j]) {
}
// printf("3 i:%d, j:%d\n", i, j);
} else if (sum < 0) {
i++;
} else {
j--;
}
}
} return res;
}
16. 最接近的三数之和
int Cmp(const void *a, const void *b)
{
return *(int *)a - *(int *)b;
} int threeSumClosest(int* nums, int numsSize, int target)
{
// 排序
qsort(nums, numsSize, sizeof(int), Cmp); int k, i, j, sum, best, sub;
best = 1e7; // 用一个很大的数,保证一定会更新1次best
for (k = 0; k < numsSize - 2; k++) {
if (k > 0 && nums[k] == nums[k - 1]) {
continue;
}
i = k + 1;
j = numsSize - 1;
while (i < j) {
sum = nums[k] + nums[i] + nums[j];
if (sum == target) {
return sum;
}
if (abs(sum - target) < abs(best - target)) {
best = sum;
} if (sum < target) {
i++;
if (i == j) {
break;
}
} else if (sum > target) {
j--;
if (i == j) {
break;
}
}
}
}
return best;
}
C语言刷2数/3数/4数之和的更多相关文章
- C语言中无符号数和有符号数之间的运算
		
C语言中无符号数和有符号数之间的运算 C语言中有符号数和无符号数进行运算(包括逻辑运算和算术运算)默认会将有符号数看成无符号数进行运算,其中算术运算默认返回无符号数,逻辑运算当然是返回0或1了. un ...
 - R语言︱LDA主题模型——最优主题数选取(topicmodels)+LDAvis可视化(lda+LDAvis)
		
每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- 笔者寄语:在自己学LDA主题模型时候,发现该模 ...
 - leecode刷题(8)-- 两数之和
		
leecode刷题(8)-- 两数之和 两数之和 描述: 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输 ...
 - 基于visual Studio2013解决C语言竞赛题之1060寻找回文数
		
   题目 解决代码及点评 /* 60. 回文数指左右数字对称的数,如121,2112都是回文数.回文数猜想:取一任意十进制数,将其倒过来,并将这两个数相加, 然后把这个相加的和倒过来再与 ...
 - #leetcode刷题之路9- 回文数
		
判断一个整数是否是回文数.回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数. 示例 1:输入: 121输出: true 示例 2:输入: -121输出: false解释: 从左向右读, 为 ...
 - python刷LeetCode:9. 回文数
		
难度等级:简单 题目描述: 判断一个整数是否是回文数.回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数. 示例 1: 输入: 121输出: true示例 2: 输入: -121输出: fa ...
 - Java基本类型占用字节数(或 bit数)
		
背景:面试时候问到int类型占用几个字节,以及表示的大小,居然一脸懵逼,任何细节都不能放过. Java基本类型占用字节数(或 bit数) java是跨平台的语言,所以不论在什么系统中这些东西在内存中所 ...
 - 使用GetLogicalProcessorInformation获取逻辑处理器的详细信息(NUMA节点数、物理CPU数、CPU核心数、逻辑CPU数、各级Cache)
		
不过必须XP SP3以上才行.所有API大全: https://msdn.microsoft.com/en-us/library/windows/desktop/aa363804(v=vs.85).a ...
 - Nginx 关于进程数 与CPU核心数相等时,进程间切换的代价是最小的-- 绑定CPU核心
		
在阅读Nginx模块开发与架构模式一书时: "Nginx 上的进程数 与CPU核心数相等时(最好每个worker进程都绑定特定的CPU核心),进程间切换的代价是最小的;" &am ...
 - LFYZ-OJ ID: 1026 数的计数(数的计算)NOIP2001
		
数的计算(数的计数) 题目描述 我们要求找出具有下列性质数的个数(包含输入的自然数n).先输入一个自然数n(n<=1000),然后对此自然数按照如下方法进行处理: 不作任何处理; 在它的左边加上 ...
 
随机推荐
- Java 继承01
			
继承 ●示例 class Person { public String name; Person(){ System.out.println("Person Constrctor...&qu ...
 - Linux配置zookeeper 和zookeeper简单介绍
			
一.zookeeper介绍? 一.zookeeper 简单介绍? 1.什么是集群? // 很多台服务器保持连接通讯状态,并且所有的服务器做同一件事就称之为集群 2.什么是zookeeper? 注册中心 ...
 - js文件中三斜杠注释///reference path的用途
			
编辑某个js文件时,要想这个js文件出现其他js成员的ide提示,可以在js文件开头使用3个斜杠注释和reference指令的path指向此js文件路径,这样在编写这个js文件时,ide就会自动出现p ...
 - Spring Cloud Alibaba Nacos 服务注册与发现功能实现!
			
Nacos 是 Spring Cloud Alibaba 中一个重要的组成部分,它提供了两个重要的功能:服务注册与发现和统一的配置中心功能. 服务注册与发现功能解决了微服务集群中,调用者和服务提供者连 ...
 - [USACO18DEC]The Cow Gathering P
			
首先可以思考一下每次能删去的点有什么性质. 不难发现,每次能删去的点都是入度恰好为 \(1\) 的那些点(包括 \(a_i \rightarrow b_i\) 的有向边). 换句话说,每次能删去的点既 ...
 - js中全局和局部变量的区别
			
2 3 4 5 6 7 8 9 10 <script type="text/javascript"> var a = 1; function hehe() { ...
 - ArrayList和LinkList的区别
			
底层实现区别 ArrayList 底层实现就是数组,且ArrayList实现了RandomAccess,表示它能快速随机访问存储的元素,通过下标 index 访问,只是我们需要用 get() 方法的形 ...
 - VC 创建快捷方式
			
转载请注明来源:https://www.cnblogs.com/hookjc/ VC6下测试时使用的是绝对地址BOOL CFGDlg::CreateLink ( LPSTR szPath ...
 - Saas系统架构的思考,多租户Saas架构设计分析
			
ToB Saas系统最近几年都很火.很多创业公司都在尝试创建企业级别的应用 cRM, HR,销售, Desk Saas系统.很多Saas创业公司也拿了大额风投.毕竟Saas相对传统软件的优势非常明显. ...
 - array_multisort array_merge 排序
			
前段时间遇到一个排序问题,大致是这样的:$demo = array( 0 => array( 'name' ...