zoukankan      html  css  js  c++  java
  • leetcode 15. 3Sum 双指针

    题目链接

    给n个数, 找出三个数相加结果为0的所有的组, 不可重复。

    用双指针的思想,O(n^2)暴力的找, 注意判重复。

     1 class Solution {
     2 public:
     3     vector<vector<int>> threeSum(vector<int>& nums) {
     4         int sz = nums.size();
     5         vector <vector<int> > ans;
     6         vector <int> tmp;
     7         sort(nums.begin(), nums.end());
     8         for(int i = 0; i<sz; i++) {
     9             if(i>0 && nums[i] == nums[i-1])
    10                 continue;
    11             int l = i+1, r = sz-1;
    12             while(l<r) {
    13                 int sum = nums[i]+nums[l]+nums[r];
    14                 if(sum < 0) {
    15                     l++;
    16                 } else if (sum>0) {
    17                     r--;
    18                 } else {
    19                     tmp.push_back(nums[i]);
    20                     tmp.push_back(nums[l++]);
    21                     tmp.push_back(nums[r--]);
    22                     sort(tmp.begin(), tmp.end());
    23                     ans.push_back(tmp);
    24                     tmp.clear();
    25                     while(l<r&&nums[l-1]==nums[l])
    26                         l++;
    27                     while(r>l&&nums[r] == nums[r+1])
    28                         r--;
    29                 }
    30             }
    31         }
    32         return ans;
    33     }
    34 };
  • 相关阅读:
    HTML+CSS+JS设计注册页面
    1.20学习总结
    Linux安装python3
    Linux命令
    vue安装
    Python实现发送邮件
    C语言带参数的main函数
    Fibonacci 数列递归 重复计算
    gray code 格雷码 递归
    河内塔
  • 原文地址:https://www.cnblogs.com/yohaha/p/5121813.html
Copyright © 2011-2022 走看看