【LeetCode刷题记录】18. 四数之和

题目描述:
在这里插入图片描述
题解:
一、排序+双指针
思路和三数之和类似,不赘述。

vector<vector<int>> fourSum(vector<int>& nums, int target) {
 if (nums.empty() || nums.size() < 4)return{};
 sort(nums.begin(), nums.end());
 vector<vector<int>> rst{};
 for (int s = 0; s < nums.size(); s++) {
  if (s > 0 && nums[s - 1] == nums[s])continue;
  for (int e = nums.size() - 1; e > s; e--) {
   if (e < nums.size() - 1 && nums[e + 1] == nums[e])continue;
   int l = s + 1, r = e - 1;
   while (l < r) {
    if (nums[s] + nums[l] + nums[r] + nums[e] == target) {
     vector<int> temp{ nums[s],nums[l],nums[r],nums[e] };
     rst.push_back(temp);
     l++;
     r--;
     while (l < r && nums[l] == nums[l - 1]) l++;
     while (l < r && nums[r] == nums[r + 1]) r--;
    }
    else if (nums[s] + nums[l] + nums[r] + nums[e] < target)l++;
    else r--;
   }
  }
 }
 return rst;
}

复杂度分析:三层循环,时间复杂度O(n3);几个局部变量,空间复杂度O(1)。

原创文章 23 获赞 0 访问量 976

猜你喜欢

转载自blog.csdn.net/weixin_42192493/article/details/105266116