当前位置: 首页 > news >正文

力扣刷题(6)

两数之和 II - 输入有序数组

两数之和 II - 输入有序数组-力扣

在这里插入图片描述
思路:

  1. 因为该数组是非递减顺序排列,因此可以设两个左右下标
  2. 当左右下标的数相加大于target时,则表示右下标的数字过大,因此将右下标 - -
  3. 当左右下标的数相加小于target时,则表示左下标的数字过小,因此将左下标 + +
  4. 当相等时,则将左右下标赋值给动态开辟的数组,并返回(注意左右下标要+1)
int* twoSum(int* numbers, int numbersSize, int target, int* returnSize) {int* ret=(int*)malloc(sizeof(int)*2);*returnSize=2;int left =0,right=numbersSize-1;while(left < right){if(numbers[left] + numbers[right] == target){ret[0]=left+1;ret[1]=right+1;return ret;}else if(numbers[left] + numbers[right] > target){right--;}else{left++;}}return ret;
}

在这里插入图片描述

三数之和

三数之和-力扣
在这里插入图片描述
思路来源:灵茶山艾府

  1. 将数组进行排序
  2. 将三个数分为两组,第一个数一组,第二三个数的和分为一组,这样思路就和上一题的两数相加相同了
  3. 当第一个数存在重复时,需要continue从而跳到最后一个重复的数
  4. 再对后两个数进行判断,思路同第一题

这题存在两个能够进行优化的地方:

  1. 当三个连续数字相加大于0时,则不存在和为0的数字,可以直接break退出循环(因为数组是有序的)
  2. 当一个数和最后两个最大的数字之和小于0,则该数字不可能存在为0的情况,直接continue进入下一个数字的判断即可
int cmp(const void* a, const void* b){return *(int*)a-*(int*)b;}int** threeSum(int* nums, int numsSize, int* returnSize, int** returnColumnSizes) {qsort(nums,numsSize,sizeof(int),cmp);int** ret=(int**)malloc(sizeof(int*)*numsSize*numsSize);*returnColumnSizes=(int*)malloc(sizeof(int)*numsSize*numsSize);int m=0;for(int i=0;i<numsSize-2;i++){//跳过重复数字if(i > 0 && nums[i] == nums[i-1])continue;if(nums[i] + nums[i+1] + nums[i+2] > 0)break;//优化一if(nums[i] + nums[numsSize-1] + nums[numsSize-2] < 0)continue;//优化二int j=i+1;int k=numsSize-1;while(j < k){if(nums[i] + nums[j] + nums[k] > 0)k--;else if(nums[i] + nums[j] + nums[k] < 0)j++;else{//添加三元组int* arr=(int*)malloc(sizeof(int)*3);arr[0]=nums[i];arr[1]=nums[j];arr[2]=nums[k];ret[m]=arr;(*returnColumnSizes)[m++]=3;//跳过重复数字for(j++;j < k && nums[j] == nums[j-1];j++);for(k--;k > j && nums[k] == nums[k+1];k--);}}}*returnSize=m;return ret;
}

在这里插入图片描述

最接近的三数之和

最接近的三数之和-力扣
在这里插入图片描述
思路同第二题类似

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 sum=nums[0]+nums[1]+nums[2];for(int i=0;i<numsSize-2;i++){int j=i+1;int k=numsSize-1;while(j < k){int tmp=nums[i]+nums[j]+nums[k];if(abs(tmp-target) < abs(sum-target))sum=tmp;if(tmp > target)k--;else if(tmp < target)j++;elsereturn sum;}}return sum;
}

在这里插入图片描述

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 唯徳知识产权管理系统 DownloadFileWordTemplate 文件读取漏洞复现
  • 【Linux】Ubuntu 22.04 shell实现MySQL5.7 tar 一键安装
  • LeetCode[中等] 合并区间
  • C++ | Leetcode C++题解之第400题第N位数字
  • unity3d入门教程六
  • [001-03-007].第07节:Redis中的管道
  • 【python报错已解决】`ModuleNotFoundError: No module named ‘requests‘`
  • 中级练习[4]:Hive SQL商品销售与用户增长数据分析
  • python使用Pyvis库绘制B站评论互动网络结构图
  • LeetCode70:爬楼梯
  • 后端入门 (JQuery基础) 01
  • Python 正则表达式详解:从基础匹配到高级应用
  • AIGC实战——多模态模型Flamingo
  • 手势开关灯
  • 上海泗博EtherNet/IP转PROFIBUS DP网关EPS-320IP成都地铁项目应用案例
  • 9月CHINA-PUB-OPENDAY技术沙龙——IPHONE
  • 【从零开始安装kubernetes-1.7.3】2.flannel、docker以及Harbor的配置以及作用
  • 2017年终总结、随想
  • Java 最常见的 200+ 面试题:面试必备
  • Kibana配置logstash,报表一体化
  • nodejs调试方法
  • Wamp集成环境 添加PHP的新版本
  • 初识 beanstalkd
  • 第13期 DApp 榜单 :来,吃我这波安利
  • 机器学习 vs. 深度学习
  • 猫头鹰的深夜翻译:JDK9 NotNullOrElse方法
  • 职业生涯 一个六年开发经验的女程序员的心声。
  • scrapy中间件源码分析及常用中间件大全
  • 如何用纯 CSS 创作一个货车 loader
  • ​批处理文件中的errorlevel用法
  • # Apache SeaTunnel 究竟是什么?
  • # 达梦数据库知识点
  • #07【面试问题整理】嵌入式软件工程师
  • #微信小程序(布局、渲染层基础知识)
  • $.ajax()
  • (2024,Flag-DiT,文本引导的多模态生成,SR,统一的标记化,RoPE、RMSNorm 和流匹配)Lumina-T2X
  • (delphi11最新学习资料) Object Pascal 学习笔记---第5章第5节(delphi中的指针)
  • (echarts)echarts使用时重新加载数据之前的数据存留在图上的问题
  • (附源码)计算机毕业设计SSM保险客户管理系统
  • (附源码)计算机毕业设计高校学生选课系统
  • (七)理解angular中的module和injector,即依赖注入
  • (四) Graphivz 颜色选择
  • (一)Mocha源码阅读: 项目结构及命令行启动
  • (转)3D模板阴影原理
  • (转)自己动手搭建Nginx+memcache+xdebug+php运行环境绿色版 For windows版
  • .form文件_一篇文章学会文件上传
  • .NET CF命令行调试器MDbg入门(四) Attaching to Processes
  • .NET Entity FrameWork 总结 ,在项目中用处个人感觉不大。适合初级用用,不涉及到与数据库通信。
  • .NET Framework、.NET Core 、 .NET 5、.NET 6和.NET 7 和.NET8 简介及区别
  • .NET 使用 ILRepack 合并多个程序集(替代 ILMerge),避免引入额外的依赖
  • .NET/C# 如何获取当前进程的 CPU 和内存占用?如何获取全局 CPU 和内存占用?
  • .NET应用UI框架DevExpress XAF v24.1 - 可用性进一步增强
  • .NET中使用Protobuffer 实现序列化和反序列化
  • .Net转Java自学之路—SpringMVC框架篇六(异常处理)
  • .pub是什么文件_Rust 模块和文件 - 「译」