zoukankan      html  css  js  c++  java
  • 15. 3Sum

    原题目:

    15. 3Sum

    读题:

    任意三个数相加为0,但是不能是相同的三元组

    解题思路:

    先排序,然后遍历序列,如果遇到相同的数则跳过,指定一个num[i]后,剩下的就是要找到另外两个数A+B=-num[i],可以采用二分查找,begin = i+1;end = len -1;依次查找可以得到,以下是AC代码

    class Solution 
    {
    public:
    	vector<vector<int>> threeSum(vector<int>& nums) 
    	{
    		int i,j,k;
    		int sum,begin,end;
    		vector <vector<int>> result;
    		int length = nums.size();
    		if(length < 3)
    		{
    			return result;
    		}
    		sort(nums.begin(),nums.end());
    
    		for(i=0;i<length;i++)
    		{
    			if(nums[i]>0)
    			{
    				break;
    			}
    			if( i > 0 && nums[i] == nums[i-1])
    			{
    				continue;
    			}
    			begin = i+1;
    			end = length-1;
    			while(begin < end)
    			{
    				sum = nums[i] + nums[begin] + nums[end];
    				if (0 == sum)
    				{
    					vector <int> temp;
    					temp.push_back(nums[i]);
    					temp.push_back(nums[begin]);
    					temp.push_back(nums[end]);
    					result.push_back(temp);
    					begin++;
    					end--;
    					while(begin < end &&nums[begin] == nums[begin-1]) 
    					{
    						begin++;
    					}
    					while(begin < end &&nums[end] == nums[end+1]) 
    					{
    						end--;
    					}
    
    				}
    				else if(sum>0)
    				{
    					end--;
    				}
    				else 
    				{
    					begin++;
    				}
    			}			
    		}
    		return result;
    
    	}
    };
    int main()
    {
    	Solution s;
    	int i,j;
    	vector <vector <int>> result;
    	vector <int> v;
    	v.push_back(-1);
    	v.push_back(0);
    	v.push_back(1);
    	v.push_back(2);
    	v.push_back(-1);
    	v.push_back(-4);
    	result = s.threeSum(v);
    	for(i=0;i<result.size();i++)
    	{
    		for(j=0;j<result[i].size();j++)
    		{
    			cout<<result[i][j]<<endl;
    		}
    	}
    	
    }
    

      

  • 相关阅读:
    BI的相关技术和产品细分(转自娄工)
    SOA系列二:采用SOA的常见失误
    ASP.NET第三方控件网站
    BI名词字典
    VSS2005 添加文件夹方法!
    c#范型编程系列一(非原创)
    数据挖掘项目的生命周期
    SQLServer 2005开发与商业智能培训大纲
    CVSNT配置配置与在ECLIPSE中使用
    JS通用UI框架
  • 原文地址:https://www.cnblogs.com/xqn2017/p/8006420.html
Copyright © 2011-2022 走看看