LeetCode-18-4Sum(证明/KSum)-Medium
2015-12-27 15:31
357 查看
题意理解:
在vector中找出所有的a,b,c,d,其中a<b<c<d,要求a+b+c+d=target。并且,不能有重复的abcd组合;
解题思路:
同15-3Sum
解题代码:
在vector中找出所有的a,b,c,d,其中a<b<c<d,要求a+b+c+d=target。并且,不能有重复的abcd组合;
解题思路:
同15-3Sum
解题代码:
class Solution { public: vector<vector<int>> fourSum(vector<int>& nums, int target) { int size=nums.size(); vector<vector<int>> ans; if(size<4){ return ans; } sort(nums.begin(), nums.end()); int left, right; int a, b, c, d; for(int i=0;i<size-3;i++){ if(i==0){ a=nums[i]; }else{ if(nums[i]==a){ continue; }else{ a=nums[i]; } } //cout<<"a= "<<a<<endl; for(int j=i+1;j<size-2;j++){ if(j==i+1){ b=nums[j]; }else{ if(nums[j]==b){ continue; }else{ b=nums[j]; } } //cout<<"b= "<<b<<endl; left=j+1; right=size-1; int preL, preR; bool isPreLRInit=false; while(left<right){ int sum=a+b+nums[left]+nums[right]; if(sum>target){ right--; }else if(sum<target){ left++; }else{ if(!isPreLRInit){ isPreLRInit=true; }else{ if(preL==nums[left]){ left++; continue; } if(preR==nums[right]){ right--; continue; } } c=nums[left]; d=nums[right]; //cout<<"a b c d= "<<a<<" "<<b<<" "<<c<<" "<<d<<endl; vector<int> t={a, b, c, d}; ans.push_back(t); preL=nums[left]; preR=nums[right]; left++; right--; } } } } return ans; } };
相关文章推荐
- 插入排序
- Android Studio开发文档doc显示问题
- 【SQL】——提升思想,代码优化
- 编程输入一行文字,找出其中的大写字母,小写字母个数
- JavaScript浏览器对象
- 详解SQL死锁检测的方法
- eclipse推荐的插件
- a标签样式
- php基本语法
- 自定义UICollectionView的头视图或者尾视图(UICollectionReusableView)
- C# Console.WriteLine()函数中{}输出格式详解
- 编写一个使用指针的c函数,交换数组a和数组b中的对应元素
- ARM2440换lcd
- Redis 有序聚合实现排行榜功能
- Java多线程之CountDownLatch
- android nfc中Ndef格式的读写
- C#学习笔记006-字符串
- C#编程中Console.Write()和Console.WriteLine()的区别
- 设有一数列,包含10 个数,已按升序排好。
- 如何利用碎片时间,和别人拉开距离