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),然后对此自然数按照如下方法进行处理: 不作任何处理; 在它的左边加上 ...
随机推荐
- 搭建BBS博客系统
目录 一:搭建BBS项目 1.部署数据库 2.启动数据库 3.进入数据库 4.远程连接MySQL数据 5.pycham连接Mysql 二:开始部署BBS 1.上传代码 2.数据库迁移 3.删除文件 4 ...
- rsync.sh
#!/bin/bash file1=`du -sm /var/www/vhosts/|awk '{print $1}'` ps=`ps -C rsync --no-header|wc -l` if [ ...
- service层 必须做业务逻辑的处理
package com.aaa.zxf.service; import com.aaa.zxf.mapper.BookMapper; import com.aaa.zxf.model.Book; im ...
- 关于mysql,需要掌握的基础(二):JDBC和DAO层
目录 关于mysql,需要掌握的基础(二):JDBC和DAO层 1.了解jdbc是什么? 2.加载注册驱动:为什么Class.forName("com.mysql.jdbc.Driver ...
- 【转】C# / Extension 扩展方法
扩展方法简介扩展方法使你能够向现有类型"添加"方法,而无需创建新的派生类型.重新编译或以其他方式修改原始类型. 扩展方法是一种特殊的静态方法,但可以像扩展类型上的实例方法一样进行调 ...
- 微服务中的CAP原则
CAP原则:指的是在一个分布式系统中,Consistency(一致性). Availability(可用性).Partition tolerance(分区容错性),三个要素最多同时实现两点不可能同时实 ...
- 如何修改TOMCAT的默认主页为你自己项目的主页
感谢作者:xxs673076773 原文链接:https://www.iteye.com/blog/xxs673076773-1134805 (最合适的) 最直接的办法是,删掉tomcat下原有Roo ...
- Windows安装RabbitMQ过程及相关问题
一.下载 1.首先需要下载erlang,下载地址:http://www.erlang.org/downloads 2.其次需要下载RabbitMQ,下载地址:https://www.rabbitmq. ...
- 浅谈Java正则表达式
正则表达式我们都知道,它定义了字符串的模式,可以用来搜索.编辑或处理文本.我们在某些特定场景中用起来是非常方便的.它等于是给我们划定了一个范围,让我们可以精准的匹配到我们想要的结果.比如我想判断一个几 ...
- 一站式超全JavaScript数组方法大全
一站式JavaScript数组方法大全(建议收藏) 方法一览表 详细操作 本人总结了JavaScript中有关数组的几乎所有方法(包含ES6之后新增的),并逐一用代码进行演示使用,希望可以帮助大家! ...