【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)。

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