• 15. 三数之和 (思维)


    题目连接:

    https://leetcode-cn.com/problems/3sum/

    题目大意:

    中文题目

    具体思路:

    使得 a +b +c = 0,这个等式成立有如下情况

    1. 都为0

    2. 一正两负/两正一负

    3. 一正一负一零

    观察之后,除了0这种情况,都会存在一个负数,我们可以第一步枚举负数,枚举完之后,再从剩下的数中凑得等式成立

    我们将所有的数进行排序之后,第一部分枚举负数,第二部分通过两个指针来凑数

    关于去重,如果负数都相同,这个好判断。

    需要考虑的是剩下的两个数的去重,我们可以通过一个临时变量,保存b的值,如果a,b都相同,那么c一定相同,通过这个来实现去重功能

    AC代码:

     1 class Solution {
     2 public:
     3     vector<vector<int>> threeSum(vector<int>& nums) {
     4         vector<vector<int>>ans;
     5         vector<int>tmp;
     6         int len = nums.size();
     7         if(len<3) 
     8             return ans;
     9         int i, tmp_sum = 0x3f3f3f3f, di;
    10         
    11         sort(nums.begin(), nums.end());
    12         for(i = 0; i < len - 2; i++){
    13             if(nums[i] > 0)break;
    14             if(nums[i] == -tmp_sum)continue;
    15             tmp.push_back(nums[i]);
    16             tmp_sum = -nums[i];
    17             int l = i + 1, r = len - 1;
    18             di = nums[l] - 1;
    19             while(l < r){
    20                 if(nums[i] + nums[l] + nums[r] == 0){
    21                     if(nums[l] != di){
    22                     tmp.push_back(nums[l]);
    23                     tmp.push_back(nums[r]);
    24                     ans.push_back(tmp);
    25                     tmp.pop_back();
    26                     tmp.pop_back();
    27                     di = nums[l];
    28                     }
    29                     l++;
    30                     r--;
    31                 }
    32                 else if(nums[l] + nums[r] > -nums[i]){
    33                     r--;
    34                 }
    35                 else if(nums[l] + nums[r] < -nums[i]){
    36                     l++;
    37                 }
    38             }
    39             tmp.pop_back();
    40         }
    41       return ans;   
    42     }
    43 };
  • 相关阅读:
    解决vue项目route使用history模式,tomcat部署刷新url 404问题
    更新
    Mac Anaconda 安装
    Mac python 环境配置
    Mac Python PyQt5 环境搭建
    Python 百分比计算
    Python __init__.py 文件使用
    Python redis 简单介绍
    python Django 创建应用
    python Django 项目创建
  • 原文地址:https://www.cnblogs.com/letlifestop/p/11536051.html
Copyright © 2020-2023  润新知