zoukankan      html  css  js  c++  java
  • 15.三数之和

    三数之和

    排序 + 双指针

    1. 排序
    2. 一个循环,确定三个数中的一个
    3. 使用双指针,如果三数之和大于0,右指针左移(因为由小到大排序,所以左边的数要小于右边)
    vector<vector<int>> threeSum(vector<int>& nums) {
        vector<vector<int>> ans;
        sort(nums.begin(), nums.end()); // 序
        if (nums.size() < 3) return ans; // 果不够三个数直接返回
        for (int i = 0; i < nums.size() - 2; i++) { //先确定其中一个数
            while (i && i < nums.size() && nums[i] == nums[i-1]) i++; // 重,重复数字跳过
            int l = i+1, r = nums.size() - 1; //两个指针 l 和 r
            while (l < r) {
                int sum = nums[l] + nums[r] + nums[i]; //得到三数之和
                if (sum > 0) r--; // 如果大于零 左移
                else if (sum < 0) l ++; // 如果小于零 右移
                else { // 等于
                    ans.push_back({nums[i], nums[l], nums[r]}); // 添加进答案
                    l++, r--;
                    while (l < nums.size() && nums[l] == nums[l-1]) l++; // 判重
                    while (r > 0 && nums[r+1] == nums[r]) r--;
                }
            }
        }
    	return ans;
    }
    
  • 相关阅读:
    模块和包
    异常处理
    re模块下的的常用方法
    lambda匿名函数sorted排序函数filter过滤函数map映射函数
    内置函数
    生成器函数,迭代器
    网站架构伸缩性概论
    网站架构高可用小结
    Apache的三种工作模式
    HTTP协议
  • 原文地址:https://www.cnblogs.com/mayapony/p/13049743.html
Copyright © 2011-2022 走看看