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),然后对此自然数按照如下方法进行处理: 不作任何处理; 在它的左边加上 ...
随机推荐
- Vulnhub DC-1靶场学习笔记
0x00 环境准备 本文介绍了Vulnhub中DC-1靶机的实战渗透过程,实战的目标是获取到服务器中的5个flag,最终目标是获取到root目录下的thefinalflag文件: 测试环境 备注 Ka ...
- 运行项目时出现Sat May 15 20:00:19 CST 2021 WARN: Establishing SSL connection without server‘s identity veri
这时我们只需要在连接数据库的url上设置:useSSL=false就可以了.
- linux关闭防火墙与开启防火墙命令
一:下面是red hat/CentOs7关闭防火墙的命令! 1:查看防火状态 systemctl status firewalld service iptables status 2:暂时关闭防火墙 ...
- ORA-15081: failed to submit an I/O operation to a disk
Problem: While restoring controlfile to test environment, from filesystem or tape environment after ...
- 回顾 Flutter 2021 重要时刻,奉上虎年红包封面喜迎新年!
2021 年,Flutter 正式进入 2.x 系列的正式版发布,年初的 Flutter 2 的发布 打开了一个新的"格局",为 Flutter 的加入了第五大特色--「可移植性」 ...
- HowToDoInJava 其它教程 1 · 翻译完成
原文:HowToDoInJava 协议:CC BY-NC-SA 4.0 欢迎任何人参与和完善:一个人可以走的很快,但是一群人却可以走的更远. ApacheCN 学习资源 目录 Maven 教程 如何在 ...
- Springboot整合RocketMQ解决分布式事务
直接上代码: 代码结构如下: 依次贴出相关类: DataSource1Config: package com.example.demo.config;import org.apache.ibatis. ...
- C++中三种正则表达式比较(C regex,C ++regex,boost regex)
工作需要用到C++中的正则表达式,以下三种正则可供参考 1,C regex #include <regex.h> #include <iostream> #include &l ...
- 取消a标签的默认行动(跳转到href)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- android中listView下拉刷新
Android的ListView是应用最广的一个组件,功能强大,扩展性灵活(不局限于ListView本身一个类),前面的文章有介绍分组,拖拽,3D立体,游标,圆角,而今天我们要介绍的是另外一个扩展Li ...