每日算法之十六:4sum
来源:互联网 发布:具体网络架构图 编辑:程序博客网 时间:2024/05/19 13:17
Given an array S of n integers, are there elements a, b, c, and d in S such that a + b + c + d = target? Find all unique quadruplets in the array which gives the sum of target.
Note:
- Elements in a quadruplet (a,b,c,d) must be in non-descending order. (ie, a ≤ b ≤ c ≤ d)
- The solution set must not contain duplicate quadruplets.
For example, given array S = {1 0 -1 0 -2 2}, and target = 0. A solution set is: (-1, 0, 0, 1) (-2, -1, 1, 2) (-2, 0, 0, 2)
直接上代码:最主要的还是进行去重。
<span style="font-size:18px;">class Solution { public: vector<vector<int> > fourSum(vector<int> &num, int target) { vector<vector<int> > ret; if(num.size()==0) return ret; sort(num.begin(),num.end()); for(int i = 0;i<num.size();++i) { if(i>0&&num[i] == num[i-1]) continue; for(int j = i+1;j<num.size();j++) { if(j>i+1&&num[j] == num[j-1]) continue; int k = j+1,t = num.size()-1; while(k<t) { if(k>j+1&&num[k] == num[k-1])//这里是if,而不是while.如果是while可能会越界,在每一次 {k++;continue;} //指针变化之后都要进行判断。避免越界的发生。</span><pre name="code" class="cpp"><span style="font-size:18px;"> //这里是contimue,而不是break.如果是while,也不能是break,因为可能导致t指针的重复。</span>if(t<num.size()-1&&num[t] == num[t+1]) {t--;continue;} // int sum = num[i]+num[j]+num[k]+num[t]; if(sum<target) k++; else if(sum>target) t--; else { vector<int> v; v.push_back(num[i]); v.push_back(num[j]); v.push_back(num[k]); v.push_back(num[t]); ret.push_back(v); k++;//哪一个变化都可以 } } } } return ret; }};
0 0
- 每日算法之十六:4sum
- 每日算法之十四:3Sum
- 每日算法之三十一:Combination Sum
- 每日算法之一:Two Sum
- 每日算法之二十六:Substring with Concatenation of All Words
- 第二十六天 实施之每日报告
- Algorithm之路十六:3Sum Closest
- 每日算法之韩信点兵
- LLVM每日谈之十六 LLVM的学习感悟
- 【每日一C之十六】C语言位字段
- LLVM每日谈之二十六 riscv-llvm
- LeetCode OJ算法题(十六):3Sum Closest
- 每日算法之大数加法
- 每日算法之十五:threesumClosset
- 每日算法之三十八:Anagrams
- 十六、图算法之有向图
- C++ STL算法系列之十六:iter_swap
- 每日一算法之《贪心算法》
- android退出应用:弹出对话框退出应用
- 如何灵活运用PHP判断字符串的包含 PHP数组包含
- 解决Sql server分页时第二页以上查询结果不正常的问题
- iOS 交互式动画
- matlab转c
- 每日算法之十六:4sum
- SwipeRefreshLayout: How to use
- 百字3元的论文摘要,——我们要买来些什么
- vc++使用EmptyWorkingSet来清理程序的内存
- OCP 1Z0 051 126
- 三星南京研发中心2014暑期实习嵌入式开发面试笔试部分
- 机房收费系统集锦(一)---打开重复窗体
- 深入理解Activity的生存期(二)
- SPI接口调试