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

leetcode题目18

四数之和

中等
给你一个由 n 个整数组成的数组 nums ,和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] (若两个四元组元素一一对应,则认为两个四元组重复):

  • 0 <= a, b, c, d < n
  • a、b、c 和 d 互不相同
  • nums[a] + nums[b] + nums[c] +nums[d] == target

你可以按 任意顺序 返回答案 。

示例 1:

输入:nums = [1,0,-1,0,-2,2], target = 0
输出:[[-2,-1,1,2],[-2,0,0,2],[-1,0,0,1]]

示例 2:

输入:nums = [2,2,2,2,2], target = 8
输出:[[2,2,2,2]]

思路

将数组进行排序,排序后进行三层遍历,第一层遍历遍历当前数字,以及之后的三位数字求和,得到的结果大于目标值,说明不存在等于目标值的;以及末尾的三位数字,得到的结果如果小于目标值,则摆脱当前值的循环,减少内存消耗。第二层遍历同样的对他的,以及第一层遍历的值,作为底,将后续的两位数字求和,结果如果大,那么跳出循环,以及末尾的两位数字,结果如果小,则跳出该值循环。说明这两层遍历的范围不在目标值中。第三层遍历,进行左右双指针遍历。得到的结果进行比较,如果小,那么左指针后移,如果大,那么右指针左移。

代码

class Solution {public List<List<Integer>> fourSum(int[] nums, int target) {int n = nums.length;List<List<Integer>> re = new ArrayList<List<Integer>>();if(n<4){return re;}Arrays.sort(nums);for(int i =0;i<n-3;i++){if (i > 0 && nums[i] == nums[i - 1]) {continue;}if ((long) nums[i] + nums[i + 1] + nums[i + 2] + nums[i + 3] > target) {break;}if ((long) nums[i] + nums[n - 3] + nums[n- 2] + nums[n - 1] < target) {continue;}for(int j =i+1;j<n-2;j++){if (j > i + 1 && nums[j] == nums[j - 1]) {continue;}if ((long) nums[i] + nums[j] + nums[j + 1] + nums[j + 2] > target) {break;}if ((long) nums[i] + nums[j] + nums[n - 2] + nums[n - 1] < target) {continue;}int p = j+1;int q = n-1;while(p<q){long sum =(long) nums[i]+nums[j]+nums[p]+nums[q];List<Integer> li = new ArrayList<>();li.add(nums[i]);li.add(nums[j]);li.add(nums[p]);li.add(nums[q]);if(sum == target){re.add(li);while(p<q&&nums[p]==nums[p+1]){p++;}p++;while(p<q&&nums[q]==nums[q-1]){q--;}q--;}else if(sum<target){p++;}else{q--;}}}}return re;}
}
http://www.lryc.cn/news/356061.html

相关文章:

  • 后端企业级开发之yaml数据序列化格式文件详解2024
  • 智能界面设计:数字孪生与大数据结合的美学典范
  • 听说部门来了个00后测试开发,一顿操作给我整麻了
  • Linux shell命令
  • 【Linux】Linux基本指令1
  • 重学java 49 增强for
  • BUUCTF靶场[Web] [极客大挑战 2019]Havefun1、[HCTF 2018]WarmUp1、[ACTF2020 新生赛]Include
  • 现代信号处理11_Spectral Analysis谱分析(CSDN_20240526)
  • C#开发上位机应用:基础与实践
  • 话术巧妙分隔沟通效果更佳看看这个小技巧
  • 【Spring】设计模式(GOF)
  • php抖音详情和关键词搜索api
  • SOCKS 代理 和 HTTP 代理
  • 【Linux】自己实现一个bash进程
  • 记录深度学习GPU配置,下载CUDA与cuDnn
  • Word将表格调成合适的大小
  • 2024HBCPC:C Goose Goose Duck
  • Llama 3 模型家族构建安全可信赖企业级AI应用之使用 Llama Guard 保护大模型对话 (八)
  • 《一地霜白》读书笔记
  • 在Java中实现多线程之间的通信
  • Python中的json.dump与json.dumps对比
  • 【从零开始学习RabbitMQ | 第二篇】如何确保MQ的可靠性和消费者可靠性
  • 常用批处理命令及批处理文件编写技巧
  • android NetworkMonitor记录
  • OSPF优化——OSPF减少LSA更新量2
  • 【AMS】Android 8.0+ 绕开启动后台Service限制
  • 【多态】(超级详细!)
  • vue的组件化
  • spark的简单学习一
  • 【第5章】SpringBoot整合Druid