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

代码随想录 哈希 test 8

18. 四数之和 - 力扣(LeetCode)

        与三数之和类似,重点在剪枝和去重的区别,由于target可正可负,因此需要分两种情况讨论,如果target为正,则若当前选择的元素之和大于target,需要跳出这种选择,如果target为负,则若当前选择的元素之和大于target,需要跳出这种选择,可以将这两种情况简化(不完全相同)为判断当前选择的元素之和大于target且选择的元素之和>=0(目标值为-100,若元素为-99,-1,0也可以成立),去重与之前类似,注意选择第二个元素时同样需要类似的剪枝。

class Solution {
public:vector<vector<int>> fourSum(vector<int>& nums, int target) {vector<vector<int>> res;sort(nums.begin(), nums.end());for(int j = 0; j < nums.size(); j++){if(nums[j] > target && nums[j] >= 0) break;if(j > 0 && nums[j] == nums[j-1]) continue;for(int i = j + 1; i < nums.size(); i++){if(nums[i] + nums[j] > target && nums[i] + nums[j] >= 0) break;if(i > j + 1 && nums[i] == nums[i - 1]) continue;int l = i + 1, r = nums.size() - 1;while(l < r){if((long)nums[j] + nums[i] + nums[l] + nums[r] < target) l++;else if((long)nums[j] + nums[i] + nums[l] + nums[r] > target) r--;else{res.push_back({nums[j],nums[i], nums[l], nums[r]});while(r > l && nums[l + 1] == nums[l]) l++;while(r > l && nums[r - 1] == nums[r]) r--;l++, r--;}}}}return res;}
};

http://www.lryc.cn/news/518671.html

相关文章:

  • [SAP ABAP] 使用LOOP AT...ASSIGNING FIELD-SYMBOL 直接更新内表数据
  • MySQL数据导出导入
  • leetcode 127. 单词接龙
  • 如何开发一个支持海量分布式锁的应用库
  • JavaScript系列(17)--类型系统模拟
  • openssl编译
  • 校园网络综合布线系统设计与实践
  • 如果商品信息更新,爬虫会失效吗?
  • 【UE5 C++课程系列笔记】27——多线程基础——ControlFlow插件的基本使用
  • 有收到腾讯委托律师事务所向AppStore投诉带有【水印相机】主标题名称App的开发者吗
  • 标定 3
  • 用 C# 绘制谢尔宾斯基垫片
  • java.lang.NoClassDefFoundError: javax/xml/bind/DatatypeConverter
  • 双因素身份验证技术在NPI区域邮件安全管控上的解决思路
  • java后端对接飞书登陆
  • 记录一次Android Studio的下载、安装、配置
  • 直流无刷电机控制(FOC):电流模式
  • 73.矩阵置零 python
  • 垃圾收集算法
  • SQL-leetcode-262. 行程和用户
  • 太原理工大学软件设计与体系结构 --javaEE
  • Leetcode 139. 单词拆分 动态规划
  • python异常机制
  • 运行爬虫时可能遇到哪些常见问题?
  • BGP与CN2的区别 详解两者在网络传输中的应用与优势
  • Spring 项目 基于 Tomcat容器进行部署
  • “负载均衡”出站的功能、原理与场景案例
  • 02-51单片机数码管与矩阵键盘
  • 不同方式获取音频时长 - python 实现
  • 【python A* pygame 格式化 自定义起点、终点、障碍】