15. 三数之和

  1. /**
  2. * Return an array of arrays of size *returnSize.
  3. * The sizes of the arrays are returned as *returnColumnSizes array.
  4. * Note: Both returned array and *columnSizes array must be malloced, assume caller calls free().
  5. */
  6.  
  7. int Cmp(const void *a,const void *b){
  8. return *(int*)a - *(int*)b;
  9. }
  10.  
  11. int** threeSum(int* nums, int numsSize, int* returnSize, int** returnColumnSizes)
  12. {
  13. *returnSize = 0;
  14. if (numsSize < 3) {
  15. return NULL;
  16. }
  17.  
  18. qsort(nums, numsSize, sizeof(int), Cmp);
  19.  
  20. int k, i, j, sum;
  21. int **res = (int **)malloc(sizeof(int *) * 20000);
  22. *returnColumnSizes = (int *)malloc(sizeof(int) * 20000);
  23. for (k = 0; k < numsSize - 2; k++) {
  24. if (nums[k] > 0) {
  25. return res;
  26. }
  27. if (k > 0 && nums[k] == nums[k - 1]) {
  28. continue;
  29. }
  30. i = k + 1;
  31. j = numsSize - 1;
  32. while (i < j) {
  33. sum = nums[k] + nums[i] + nums[j];
  34. if (sum == 0) {
  35. // printf("k:%d, i:%d, j:%d, *returnSize:%d\n", k, i, j, *returnSize);
  36. res[*returnSize] = (int *)malloc(sizeof(int) * 3);
  37. (*returnColumnSizes)[*returnSize] = 3;
  38. res[*returnSize][0] = nums[k];
  39. res[*returnSize][1] = nums[i];
  40. res[*returnSize][2] = nums[j];
  41. *returnSize += 1;
  42. // printf("1 i:%d, j:%d\n", i, j);
  43. // 更新和去重
  44. while(i < j && nums[i] == nums[++i]) {
  45. }
  46. // printf("2 i:%d, j:%d\n", i, j);
  47. // 更新和去重
  48. while(i < j && nums[j] == nums[--j]) {
  49. }
  50. // printf("3 i:%d, j:%d\n", i, j);
  51. } else if (sum < 0) {
  52. i++;
  53. } else {
  54. j--;
  55. }
  56. }
  57. }
  58.  
  59. return res;
  60. }

16. 最接近的三数之和

  1. int Cmp(const void *a, const void *b)
  2. {
  3. return *(int *)a - *(int *)b;
  4. }
  5.  
  6. int threeSumClosest(int* nums, int numsSize, int target)
  7. {
  8. // 排序
  9. qsort(nums, numsSize, sizeof(int), Cmp);
  10.  
  11. int k, i, j, sum, best, sub;
  12. best = 1e7; // 用一个很大的数,保证一定会更新1次best
  13. for (k = 0; k < numsSize - 2; k++) {
  14. if (k > 0 && nums[k] == nums[k - 1]) {
  15. continue;
  16. }
  17. i = k + 1;
  18. j = numsSize - 1;
  19. while (i < j) {
  20. sum = nums[k] + nums[i] + nums[j];
  21. if (sum == target) {
  22. return sum;
  23. }
  24. if (abs(sum - target) < abs(best - target)) {
  25. best = sum;
  26. }
  27.  
  28. if (sum < target) {
  29. i++;
  30. if (i == j) {
  31. break;
  32. }
  33. } else if (sum > target) {
  34. j--;
  35. if (i == j) {
  36. break;
  37. }
  38. }
  39. }
  40. }
  41. return best;
  42. }

C语言刷2数/3数/4数之和的更多相关文章

  1. C语言中无符号数和有符号数之间的运算

    C语言中无符号数和有符号数之间的运算 C语言中有符号数和无符号数进行运算(包括逻辑运算和算术运算)默认会将有符号数看成无符号数进行运算,其中算术运算默认返回无符号数,逻辑运算当然是返回0或1了. un ...

  2. R语言︱LDA主题模型——最优主题数选取(topicmodels)+LDAvis可视化(lda+LDAvis)

    每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- 笔者寄语:在自己学LDA主题模型时候,发现该模 ...

  3. leecode刷题(8)-- 两数之和

    leecode刷题(8)-- 两数之和 两数之和 描述: 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输 ...

  4. 基于visual Studio2013解决C语言竞赛题之1060寻找回文数

       题目 解决代码及点评 /* 60. 回文数指左右数字对称的数,如121,2112都是回文数.回文数猜想:取一任意十进制数,将其倒过来,并将这两个数相加, 然后把这个相加的和倒过来再与 ...

  5. #leetcode刷题之路9- 回文数

    判断一个整数是否是回文数.回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数. 示例 1:输入: 121输出: true 示例 2:输入: -121输出: false解释: 从左向右读, 为 ...

  6. python刷LeetCode:9. 回文数

    难度等级:简单 题目描述: 判断一个整数是否是回文数.回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数. 示例 1: 输入: 121输出: true示例 2: 输入: -121输出: fa ...

  7. Java基本类型占用字节数(或 bit数)

    背景:面试时候问到int类型占用几个字节,以及表示的大小,居然一脸懵逼,任何细节都不能放过. Java基本类型占用字节数(或 bit数) java是跨平台的语言,所以不论在什么系统中这些东西在内存中所 ...

  8. 使用GetLogicalProcessorInformation获取逻辑处理器的详细信息(NUMA节点数、物理CPU数、CPU核心数、逻辑CPU数、各级Cache)

    不过必须XP SP3以上才行.所有API大全: https://msdn.microsoft.com/en-us/library/windows/desktop/aa363804(v=vs.85).a ...

  9. Nginx 关于进程数 与CPU核心数相等时,进程间切换的代价是最小的-- 绑定CPU核心

    在阅读Nginx模块开发与架构模式一书时: "Nginx  上的进程数 与CPU核心数相等时(最好每个worker进程都绑定特定的CPU核心),进程间切换的代价是最小的;" &am ...

  10. LFYZ-OJ ID: 1026 数的计数(数的计算)NOIP2001

    数的计算(数的计数) 题目描述 我们要求找出具有下列性质数的个数(包含输入的自然数n).先输入一个自然数n(n<=1000),然后对此自然数按照如下方法进行处理: 不作任何处理; 在它的左边加上 ...

随机推荐

  1. 【Vulnhub靶场】JANGOW: 1.0.1

    时隔这么久,终于开始做题了 环境准备 下载靶机,导入到virtualBox里面,这应该不用教了吧 开机可以看到,他已经给出了靶机的IP地址,就不用我们自己去探测了 攻击机IP地址为:192.168.2 ...

  2. python内置re模块全面实战

    目录 一:取消转义 二:python内置模块之re模块 三:常用方法 findall search match 简便 四:常用方法 finditer 匹配文件多情况 五:切割 替换 内置模块 六:分组 ...

  3. C# 读取txt文件生成Word文档

    本文将以C#程序代码为例介绍如何来读取txt文件中的内容,生成Word文档.在编辑代码前,可参考如下代码环境进行配置: Visual Studio 2017 .Net Framework 4.6.1 ...

  4. 深入理解 React 的 Virtual DOM

    React在前端界一直很流行,而且学起来也不是很难,只需要学会JSX.理解State和Props,然后就可以愉快的玩耍了,但想要成为React的专家你还需要对React有一些更深入的理解,希望本文对你 ...

  5. 用了这么久 Linux ,才知道这些概念。。。

    Linux 和 UNIX 中的文件系统是一个以 / 为根的树状式文件结构,/ 是 Linux 和 UNIX 中的根目录,同样它也是文件系统的起点.所有的文件和目录都位于 / 路径下,包括我们经常听到的 ...

  6. BootStrap基础入门概述总结

    是否还值得学习BootStrap 因为自己还是学生,自己在学习之前就先在网上看了看BootStrap是否在现在依旧流行,是否还值得学习. 以下是网友的一些评价: 20年11月 Bootstrap作为入 ...

  7. Java基础(十一)——反射

    一.概述 1.介绍 Reflection(反射)是被视为动态语言的关键,反射机制允许程序在执行期借助于Reflection API取得任何类的内部信息,并能直接操作任意对象的内部属性及方法. 加载完类 ...

  8. Emoji与unicode特殊字符的处理

    遇到了一个很让人纠结的问题:emoji表情在使用的过程中,会莫名其妙的消失,或者变成乱码,同时数据库用utf8mb4来存储,但是也出现了问题,冷备过后,导入进库的时候,变成了不可见字符,神奇的消失了! ...

  9. 使用df -h命令查看磁盘空间使用率不算高,还有很多空余空间,但是创建文件或写入数据时一直报错磁盘写满

    关于磁盘空间中索引节点爆满的问题还是挺多的,借此跟大家分享一下: 一.发现问题 在公司一台配置较低的Linux服务器(内存.硬盘比较小)的/data分区内创建文件时,系统提示磁盘空间不足,用df -h ...

  10. 简单理解Zookeeper的Leader选举

    Leader选举是保证分布式数据一致性的关键所在.Leader选举分为Zookeeper集群初始化启动时选举和Zookeeper集群运行期间Leader重新选举两种情况.在讲解Leader选举前先了解 ...