• 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;
    }
    
  • 相关阅读:
    linux性能测试(转)
    mysql基本操作(数据库,表,字段,记录)
    mysql数据库的简介(安装和卸载)
    mysql数据库
    枚举法
    python数据结构与算法简介
    自学心得
    python 进程线程阅读摘抄
    python并发编程多线程基础1
    python队列
  • 原文地址:https://www.cnblogs.com/mayapony/p/13049743.html
Copyright © 2020-2023  润新知