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

Leetcode每日刷题之18.四数之和

1.题目解析

这里的18.四数之和与之前的三数之和有着异曲同工之妙,所以建议看完三数之和再来看本题,详细题目见Leetcode每日刷题之15.三数之和 ,只不过这里需要寻找的是四元组,也是不能寻找重复的四元组并且四元组内的数字可以按照任意顺序返回

2.算法原理

关于四数之和的思路是首先固定一个数 a,这时利用三数之和的思路找出符合三个数之和为target - a ,在后续的数组范围内固定另一个数 b,然后使用双指针找出符合两数之和为 target - a - b 的二元组即可,然后对双指针找出的二元组去重,再对数字 b 去重,最后对数字 a 去重即可

3.代码展示

class Solution {
public:vector<vector<int>> fourSum(vector<int>& nums, int target) {//1.创建二维数存储数据vector<vector<int>> vv;//2.排序数组数据sort(nums.begin(),nums.end());int n = nums.size();//固定数 afor(int i = 0;i < n; ){//固定数 bfor(int j = i + 1;j < n; ){int left = j + 1;int right = n - 1;long long aim = (long long)target - nums[i] - nums[j];while(left < right){int sum = nums[left] + nums[right];if(sum < aim){left++;}else if(sum > aim){right--;}else{vv.push_back({nums[i],nums[j],nums[left],nums[right]});//去重双指针找到的二元组right--;left++;while(left < right && nums[right] == nums[right + 1]){right--;}while(left < right && nums[left] == nums[left - 1]){left++;}}}//去重 bj++;while(j < n && nums[j] == nums[j - 1]){j++;}}//去重 ai++;while(i < n && nums[i] == nums[i - 1]){i++;}}return vv;}
};

 

 


http://www.mrgr.cn/news/81.html

相关文章:

  • 无人机电池充电器技术详解
  • 阅文集团:摇不动的IP摇钱树
  • 计算机毕业设计 医院问诊系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试
  • nginx-1.24交叉编译mips-linux-gnu-gcc
  • 基于SpringBoot的网络海鲜市场系统的设计与实现
  • 共享旅游卡项目,经营的3大风险,暴利背后谨防骗局!
  • 如何删除公共盘中的Thumbs.db顽固文件
  • C语言提高(1)
  • C++ | Leetcode C++题解之第338题比特位计数
  • 【leetcode详解】T3137(思路详解 代码优化感悟)
  • 【回炉重造】Java中类的初始化
  • C++ 124类和对象_运算符重载_赋值
  • Ubuntu安装cuda
  • Windows平台RTSP|RTMP播放器如何实现实时录像功能
  • 24.8.15学习笔记(Titanic - Machine Learning from Disaster)
  • Unity动态给按钮各个状态下的图片赋值
  • Python基础知识学习总结(一)
  • 微信小程序电话号码授权
  • Android常见控件(一)
  • 运维大规模K8S集群注意事项