码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 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. // 给你一个由 n 个整数组成的数组 nums ,和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]]
    2. // (若两个四元组元素一一对应,则认为两个四元组重复):
    3. // nums[a] + nums[b] + nums[c] + nums[d] = target
    4. // -1
    5. // 1 1 -1 -2 -> -2 -1 1 1
    6. // -2 + (-1) = -3
    7. // -1 1 2 2
    8. // -1+1 = 0
    9. class Solution {
    10. public:
    11. vectorint>> fourSum(vector<int>& nums, int target) {
    12. vectorint>> result;
    13. sort(nums.begin(),nums.end());
    14. int sum = 0;
    15. int left,right;
    16. for(int k=0;ksize();k++) {
    17. // 剪枝处理
    18. if(nums[k] > target && nums[k] >= 0) break;
    19. // 正确去重a方法
    20. if(k>0 && nums[k] == nums[k-1]) continue;
    21. for(int i = k + 1;i < nums.size();i++) {
    22. // 2级剪枝处理 ? 什么时候会出现这种情况
    23. if(nums[k] + nums[i] > target && nums[k] + nums[i] >= 0) {
    24. // [1,0,-1,0,-2,2]
    25. // -2 -1 0 0 1 2
    26. // 剪枝:-1 2
    27. // 剪枝: 0 1
    28. // 因为只要 nums[k] + nums[i] > target,那么 nums[i] 后面的数都是正数的话,就一定 不符合条件了。
    29. cout<< nums[k] <<" "<< nums[i] <
    30. cout<<"2级剪枝处理?"<
    31. break;
    32. }
    33. // 对nums[i]去重
    34. if(i > k+1 && nums[i] == nums[i-1]) continue;
    35. left = i + 1;
    36. right = nums.size() - 1;
    37. while(right > left) {
    38. sum = nums[k] + nums[i] + nums[left] + nums[right];
    39. if((long)sum > target) right--;
    40. else if((long)sum < target) left++;
    41. else {
    42. result.push_back(vector<int>{nums[k],nums[i],nums[left],nums[right]});
    43. // 对nums[left] 和 nums[right] 去重
    44. while(right > left && nums[right] == nums[right-1]) right--;
    45. while(right > left && nums[left] == nums[left-1]) left++;
    46. // 找到答案时,双指针同时收缩
    47. right--;
    48. left++;
    49. }
    50. }
    51. }
    52. }
    53. return result;
    54. }
    55. };

  • 相关阅读:
    协程概述讲解
    分式理想 & 对偶群 & 对偶空间
    uniapp小程序使用web-view组件页面分享后,点击没有home小房子解决办法
    HTML CSS 个人网页设计 WEB前端大作业代码
    自学Python第二十二天- Django框架(四) iframe、其他组件和工具
    Windows工业三防平板全功能NFC近距离感应一维/二维扫描
    给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。
    【RuoYi-Vue-Plus】学习笔记 44 - XSS 过滤器以及 @Xss 注解简单分析
    WiFi模块引领智能家居革命:连接未来的生活
    JVM
  • 原文地址:https://blog.csdn.net/weixin_41987016/article/details/132852170
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号