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靶场】JANGOW: 1.0.1
时隔这么久,终于开始做题了 环境准备 下载靶机,导入到virtualBox里面,这应该不用教了吧 开机可以看到,他已经给出了靶机的IP地址,就不用我们自己去探测了 攻击机IP地址为:192.168.2 ...
- python内置re模块全面实战
目录 一:取消转义 二:python内置模块之re模块 三:常用方法 findall search match 简便 四:常用方法 finditer 匹配文件多情况 五:切割 替换 内置模块 六:分组 ...
- C# 读取txt文件生成Word文档
本文将以C#程序代码为例介绍如何来读取txt文件中的内容,生成Word文档.在编辑代码前,可参考如下代码环境进行配置: Visual Studio 2017 .Net Framework 4.6.1 ...
- 深入理解 React 的 Virtual DOM
React在前端界一直很流行,而且学起来也不是很难,只需要学会JSX.理解State和Props,然后就可以愉快的玩耍了,但想要成为React的专家你还需要对React有一些更深入的理解,希望本文对你 ...
- 用了这么久 Linux ,才知道这些概念。。。
Linux 和 UNIX 中的文件系统是一个以 / 为根的树状式文件结构,/ 是 Linux 和 UNIX 中的根目录,同样它也是文件系统的起点.所有的文件和目录都位于 / 路径下,包括我们经常听到的 ...
- BootStrap基础入门概述总结
是否还值得学习BootStrap 因为自己还是学生,自己在学习之前就先在网上看了看BootStrap是否在现在依旧流行,是否还值得学习. 以下是网友的一些评价: 20年11月 Bootstrap作为入 ...
- Java基础(十一)——反射
一.概述 1.介绍 Reflection(反射)是被视为动态语言的关键,反射机制允许程序在执行期借助于Reflection API取得任何类的内部信息,并能直接操作任意对象的内部属性及方法. 加载完类 ...
- Emoji与unicode特殊字符的处理
遇到了一个很让人纠结的问题:emoji表情在使用的过程中,会莫名其妙的消失,或者变成乱码,同时数据库用utf8mb4来存储,但是也出现了问题,冷备过后,导入进库的时候,变成了不可见字符,神奇的消失了! ...
- 使用df -h命令查看磁盘空间使用率不算高,还有很多空余空间,但是创建文件或写入数据时一直报错磁盘写满
关于磁盘空间中索引节点爆满的问题还是挺多的,借此跟大家分享一下: 一.发现问题 在公司一台配置较低的Linux服务器(内存.硬盘比较小)的/data分区内创建文件时,系统提示磁盘空间不足,用df -h ...
- 简单理解Zookeeper的Leader选举
Leader选举是保证分布式数据一致性的关键所在.Leader选举分为Zookeeper集群初始化启动时选举和Zookeeper集群运行期间Leader重新选举两种情况.在讲解Leader选举前先了解 ...