【LeetCode刷题记录】16. 最接近的三数之和

题目描述:
在这里插入图片描述
题解:
一、排序+双指针
类似上一题,思路比较简单,直接看代码。

int threeSumClosest(vector<int>& nums, int target) {
 sort(nums.begin(), nums.end());
 int rst = nums[0] + nums[1] + nums[2];
 for (int i = 0; i < nums.size(); i++) {
  if (i > 0 && nums[i] == nums[i - 1])continue;
  int l = i + 1, r = nums.size() - 1;
  while (l < r) {
   int temp = nums[i] + nums[l] + nums[r];
   if (abs(temp - target) < abs(rst - target)) {
    rst = temp;
   }
   if (temp > target)r--;
   else if (temp < target)l++;
   else return rst;
   if (nums[l] == nums[l - 1])l++;
   if (r < nums.size() - 1 && nums[r] == nums[r + 1])r--;
  }
 }
 return rst;
}

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章