• 3Sum


    思路:

    先排序,从小到大。

    三个数的加法,可以先确定一个数,剩下两个数在剩下的范围找,当总和比目标值大,就让最大的范围数减小,小就让最小的数增加。

    注意几点就是:

    第1个数,后面两个数可以有多种,所以要搜完所有数。

    对于重复的数,可以跳过。

    class Solution {
    public:
        vector<vector<int>> threeSum(vector<int>& nums) {
           vector<vector<int>> trip;
           trip.clear();
           if(nums.size()<3) return trip;
            sort(nums.begin(),nums.end());
                int i=0,j,k;
                while(i<nums.size()-2)
                {
                    while(i>0 &&nums[i]==nums[i-1]) i++;
                    j=i+1;k=nums.size()-1;
                    while(j<k )
                    {
                        while(j>i+1 &&nums[j]==nums[j-1] &&j<k) j++;
                        while(k<nums.size()-1 &&nums[k]==nums[k+1] &&j<k) k--;
                        while(nums[i]+nums[j]+nums[k]>0 &&j<k) k--;
                        while(nums[i]+nums[j]+nums[k]<0 &&j<k) j++;
                        if(nums[i]+nums[j]+nums[k]==0 &&j<k)
                        {
                            vector<int> a;
                           a.push_back(nums[i]);
                           a.push_back(nums[j]);
                           a.push_back(nums[k]);
                           trip.push_back(a);
                           j++;k--;
                        }
                        
                    }
                    i++;
                    
                }
                return  trip;
                
        }
    };
    View Code
  • 相关阅读:
    js检验文件格式
    java判空工具类
    $(document).ready() 是个什么函数?为什么要用它?
    Maven 手动添加jar
    java深克隆
    cors跨域详解
    常见异常类总结
    Spring事务回滚机制
    Java获取13位毫秒级时间戳
    JSON 字符串转换为 Map
  • 原文地址:https://www.cnblogs.com/daocaorenblog/p/5223163.html
Copyright © 2020-2023  润新知