题目来源:https://leetcode.cn/problems/4sum/description/

C++题解:第一次尝试,数组排序后,分别从两端各自往里走,单个样例都能通过,但是超时

class Solution {
public:vector<vector<int>> fourSum(vector<int>& nums, int target) {sort(nums.begin(),nums.end());int len = nums.size();int iii,jjj;vector<vector<int>> daan;for(int ii = 0; ii < len-3; ii++){if(nums[ii] > 250000000) break;for(int jj = len-1; jj > ii+2; jj--){if(nums[jj] < -250000000) break;for(int kk = ii+1; kk < jj-1; kk++){if(nums[ii] + nums[jj] + nums[kk] > 1000000000) break;for(int ll = jj-1; ll > kk; ll--){if(nums[ii] + nums[jj] + nums[kk] + nums[ll] == target) {daan.push_back({nums[ii], nums[kk], nums[ll], nums[jj]});//cout<<ii << kk << ll <<jj<<endl;break;}if(nums[ii] + nums[jj] + nums[kk] + nums[ll] < target) break;}while((nums[kk+1] == nums[kk])&&(kk+1 < jj-1)) kk++;}while((nums[jj] == nums[jj-1])&&(jj-1 > ii+2)) jj--;}while((nums[ii+1] == nums[ii])&&(ii+1 < len-3)) ii++;}return daan;}
};

第一次遇到测试用例全部通过但是超时的情况

将第四个数的位置定位成二分查找。对一些超出int的范围的情况做一些限制

class Solution {
public:vector<vector<int>> fourSum(vector<int>& nums, int target) {sort(nums.begin(),nums.end());int len = nums.size();int jjj,kkk,ll;vector<vector<int>> daan;for(int ii = 0; ii < len-3; ii++){if(nums[ii] > 250000000) break;for(int jj = len-1; jj > ii+2; jj--){if(nums[jj] < -250000000) break;for(int kk = ii+1; kk < jj-1; kk++){if(nums[ii] + nums[jj] + nums[kk] > 1000000000) break;kkk = kk; jjj = jj;ll = floor((kkk+jjj)/2);while(ll!=kkk){if((nums[kk]/2 + nums[ll]/2 + nums[jj]/2 < -500000000)or(nums[ii] + nums[jj] + nums[kk] + nums[ll] > target)){jjj = ll;ll = floor((kkk+jjj)/2);}else if((nums[kk]/2 + nums[ll]/2 + nums[jj]/2 > 500000000)or(nums[ii] + nums[jj] + nums[kk] + nums[ll] < target)){kkk = ll;ll = floor((kkk+jjj)/2);}else{   //相等的情况daan.push_back({nums[ii], nums[kk], nums[ll], nums[jj]});break;}}while((nums[kk+1] == nums[kk])&&(kk+1 < jj-1)) kk++;}while((nums[jj] == nums[jj-1])&&(jj-1 > ii+2)) jj--;}while((nums[ii+1] == nums[ii])&&(ii+1 < len-3)) ii++;}return daan;}
};

力扣18. 四数之和相关推荐

  1. 力扣18. 四数之和(JavaScript)

    建立四个指针 四数之和的双指针解法是两层for循环nums[k] + nums[i]为确定值,依然是循环内有left和right下标作为双指针,找出nums[k] + nums[i] + nums[l ...

  2. 代码随想录算法训练营15期 Day7 | 454.四数相加II、 383. 赎金信 、15. 三数之和、18. 四数之和

    目录 力扣 454.四数相加II 题解:哈希表-map-unordered_map 力扣 383.赎金信 题解1:暴力解法 题解2:哈希表--数组 力扣 454.四数相加II 题目: 给你四个整数数组 ...

  3. (补)算法训练第七天|力扣454.四数相加II ,383. 赎金信,15. 三数之和,18. 四数之和

    代码随想录算法训练营第七天|力扣454.四数相加II ,383. 赎金信,15. 三数之和,18. 四数之和 454.四数相加II 题目链接:四数相加II 参考:https://programmerc ...

  4. 代码随想录算法训练营第六天|454.四数相加II,383. 赎金信,15. 三数之和,18. 四数之和。

    代码随想录算法训练营第六天|454.四数相加II,383. 赎金信,15. 三数之和,18. 四数之和. 454.四数相加II 383. 赎金信 15. 三数之和 18. 四数之和 454.四数相加I ...

  5. 代码随想录算法训练营第7天|454.四数相加II,383. 赎金信,15. 三数之和,18. 四数之和

    454.四数相加II 力扣题目链接 给定四个包含整数的数组列表 A , B , C , D ,计算有多少个元组 (i, j, k, l) ,使得 A[i]+B[j]+C[k]+D[l] = 0. 为了 ...

  6. 代码随想录算法训练营15期 Day 7 | 454.四数相加II 、 383. 赎金信 、15. 三数之和 、18. 四数之和

    昨天看了一下别的东西,导致昨天没有练习打卡,今天补上昨天的学习知识. 454.四数相加II 建议:本题是 使用map 巧妙解决的问题,好好体会一下 哈希法 如何提高程序执行效率,降低时间复杂度,当然使 ...

  7. 代码随想录算法训练营第七天|454.四数相加II 、 383. 赎金信 、15. 三数之和、18. 四数之和

    454.四数相加II 给你四个整数数组 nums1.nums2.nums3 和 nums4 ,数组长度都是 n ,请你计算有多少个元组 (i, j, k, l) 能满足: 0 <= i, j, ...

  8. Suzy找到实习了吗Day 7 | 哈希表结束啦 454. 四数相加 II,383. 赎金信,15. 三数之和,18. 四数之和

    454. 四数相加 II(dict hash) 题目 给你四个整数数组 nums1.nums2.nums3 和 nums4 ,数组长度都是 n ,请你计算有多少个元组 (i, j, k, l) 能满足 ...

  9. 代码随想录算法训练营第七天| 哈希表理论基础 ,454.四数相加II, 383. 赎金信, 15. 三数之和, 18. 四数之和

    代码随想录算法训练营第七天| 哈希表理论基础 ,454.四数相加II, 383. 赎金信, 15. 三数之和, 18. 四数之和 454.四数相加II 建议:本题是 使用map 巧妙解决的问题,好好体 ...

最新文章

  1. Vue项目自动转换 px 为 rem,高保真还原设计图
  2. 动手完善个性化弹出提示框的过程及乐趣
  3. 近期window7x64 打补丁之后IE11x64无法启动
  4. iOS native集成Weex js文件 不显示提示框问题
  5. rabbitmq常用的五种模型
  6. 将Java EE Monolith雕刻成微服务
  7. CSS Hack 汇总快查
  8. 我的react组件化开发道路(二) 分页 组件开发
  9. Linux的一些简单命令操作
  10. docker 配置selenium调用Firefox无界面浏览器
  11. Python入门教程丨1300多行代码,让你轻松掌握基础知识点
  12. PerfMap – 显示前端网站性能的热力图插件
  13. java 反射 接口工具类_Java 反射工具类 ReflectionUtils
  14. Laravel关联模型中过滤结果为空的结果集(has和with区别)
  15. XY相互独立,且服从指数分布,求U=max(X,Y)和V=min(X,Y)的概率密度函数
  16. RANSAC算法拟合平面实现
  17. 数字签名和数字证书的区别与联系
  18. 40 岁的时候,我转行成为一名前端开发者!
  19. RocketMQ Message相关命令【实战笔记】
  20. 个人开发者的项目如何接入支付宝登录功能(保姆级教学)(Java的后台为例,其他语言类似)

热门文章

  1. Intel Turbo Boost (睿频)技术简介
  2. 小米手环模拟门禁卡读卡失败_工作生活好帮手 篇一:小米note3模拟门禁卡 你该不该知道的可能都在这里_安卓手机...
  3. 【2023秋招面经】4399 前端 一面-部门初面(26min)
  4. 【洛谷4735】 最大异或和(可持久化01Trie)
  5. java打字游戏课程设计_Java课程设计打字游戏.docx
  6. 如何用手机打印文件?手机中存储的文档怎么打印
  7. java课程 数独 文库_JAVA课程设计九宫格数独.pdf
  8. 五招教你做好企业年终绩效考核,太实用了!
  9. 大数据培训课程数据清洗案例实操-简单解析版
  10. 孙剑:如何打造云、端、芯上的视觉计算 | CCF-GAIR 2018