【LeetCode-每日一題】-16. 最接近的三數之和

1. 題目描述

在這裏插入圖片描述

2. 題目分析

  1. 類似於三整數之和
  2. 對數組進行排序,跑兩個循環,時間複雜度爲(On*2)
  3. 每次判斷當前之和與target的差距,最小值的時候,也就是最接近的三數之和

3. 題目代碼

class Solution {
  public static int threeSumClosest(int[] nums, int target) {
		Arrays.sort(nums);
		int min = 999999999;
		int ans = nums[0] + nums[1] + nums[2];
		for (int i = 0; i < nums.length - 2; i++) {
			int left = i + 1;
			int right = nums.length - 1;
			while (left < right) {
				int sum = nums[i] + nums[left] + nums[right];
				int num = Math.abs(sum - target);
				if (num < min) {
					ans = sum;
					min = num;
				}
				if (left < right && sum == target) {
					return sum;
				} else if (left < right && sum > target) {
					right--;
				} else if (left < right && sum < target) {
					left++;
				}
			}
		}
		return ans;
	}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章