zoukankan      html  css  js  c++  java
  • LeetCode: 4Sum

    跟3sum和3sum closest差不多

    C++:

     1 class Solution {
     2  public:
     3      vector<vector<int> > fourSum(vector<int> &num, int target) {
     4          // Start typing your C/C++ solution below
     5          // DO NOT write int main() function
     6          vector<vector<int>> ret;
     7          if (num.size() < 4) return ret;
     8          sort(num.begin(), num.end());
     9          for (int i = 0; i < num.size()-3; i++) {
    10              if (i > 0 && num[i] == num[i-1]) continue;
    11              for (int j = i+1; j < num.size()-2; j++) {
    12                  if (j > i+1 && num[j] == num[j-1]) continue;
    13                  int end = num.size()-1;
    14                  for (int beg = j+1; beg < end; beg++) {
    15                      if (beg > j+1 && num[beg] == num[beg-1]) continue;
    16                      int sum = num[i] + num[j] + num[beg] + num[end];
    17                      if (sum == target) {
    18                          vector<int> tmp;
    19                          tmp.push_back(num[i]);
    20                          tmp.push_back(num[j]);
    21                          tmp.push_back(num[beg]);
    22                          tmp.push_back(num[end]);
    23                          ret.push_back(tmp);
    24                      }
    25                      else if (sum > target) end--, beg--;
    26                  }
    27              }
    28          }
    29          return ret;
    30      }
    31  };

    java:

     1 public class Solution {
     2     public List<List<Integer>> fourSum(int[] nums, int target) {
     3         List<List<Integer>> ans = new ArrayList<List<Integer>>();
     4         Arrays.sort(nums);
     5         for (int i = 0; i < nums.length; i++) 
     6         {
     7             if (i > 0 && nums[i] == nums[i-1]) continue;
     8             for (int j = i+1; j < nums.length; j++)
     9             {
    10                 if (j > i+1 && nums[j] == nums[j-1]) continue;
    11                 int left = j+1;
    12                 int right = nums.length-1;
    13                 while (left < right)
    14                 {
    15                     if (left > j+1 && nums[left] == nums[left-1]) {
    16                         left++;
    17                         continue;
    18                     }
    19                     int sum = nums[i] + nums[j] + nums[left] + nums[right];
    20                     if (sum == target) {
    21                         List<Integer> tmp = new ArrayList<Integer>();
    22                         tmp.add(nums[i]);
    23                         tmp.add(nums[j]);
    24                         tmp.add(nums[left]);
    25                         tmp.add(nums[right]);
    26                         ans.add(tmp);
    27                         left++;
    28                     }
    29                     else if (sum < target) left++;
    30                     else right--;
    31                 }
    32             }
    33         }
    34         return ans;
    35     }
    36 }
    View Code
  • 相关阅读:
    PHP magic_quotes_gpc的详细使用方法
    tinkphp URL重写,支持伪静态
    element-UI中table表格的@row-click事件和@selection-change耦合了
    element-ui dialog组件添加可拖拽位置 可拖拽宽高
    vue.js 父组件如何触发子组件中的方法
    Element UI Form 每行显示多列,即多个 el-form-item
    vue组件的3种书写形式
    Java 微信公众号迁移
    Java 微信公众号导出所有粉丝(openId)
    [四]并发类容器
  • 原文地址:https://www.cnblogs.com/yingzhongwen/p/2960680.html
Copyright © 2011-2022 走看看