三数之和.

class Solution {
public:
    vector> threeSum(vector& nums) {
        vector>result;
        sort(nums.begin(),nums.end());
        for(int i=0;i0){
                return result;
            }
            if(i>0&&nums[i]==nums[i-1]){
                continue;
            }
            int left=i+1;
            int right=nums.size()-1;
            while(left0){
                    right--;
                }
                else if(nums[i]+nums[left]+nums[right]<0){
                    left++;
                }
                else{
                    result.push_back(vector{nums[i],nums[left],nums[right]});
                    while(left

定义一个result用来储存三数之和。使用sort函数对数组nums进行排序。定义一个变量i并赋值为0。当i在0到nums的长度时进入第一个循环。如果i下标对应的第一个元素的值大于0,则返回result。如果i大于0且当前元素不等前一个元素,则跳出本次循环进入下一次循环。定义两个指针left和right, left赋值为i+1,right赋值为nums.size()-1,用来固定开始和结尾的数字。  如果left小于right则进入第二个循环。如果nums[i] +nums[left]+nums[right]大于0,则说明右边大了,将右指针right左移。如果nums[i] +nums[left]+nums[right]小于0,则说明左边小了,将左指针left右移。否则,将nums[i],nums[left],nums[right]插入result中。当left小于right且左指针等于左指针的下一位时进入循环,左指针右移。跳出循环。当left小于right且右指针等于右指针的上一位时进入循环,右指针左移。跳出循环。左右指针向内缩。跳出第二层循环,跳出第一层循环。返回result

三数之和._第1张图片

你可能感兴趣的:(哈希表,算法,leetcode,数据结构)