二分_1300_轉變數組後最接近目標值的數組和

文章目錄

題目描述

在這裏插入圖片描述

思路

class Solution:
    def findBestValue(self, arr: List[int], target: int) -> int:
        left, right = 0, max(arr)
        diff_value, res = float("inf"), -1
        while left < right:  # 跳出循環時, left爲計算的total大於target的第一個值
            mid = left + (right - left) // 2
            total = sum(min(one, mid) for one in arr)
            if total <= target:
                left = mid + 1
            else:
                right = mid
        # 最終的結果 要麼爲left 要麼爲left-1
        total_1 = sum(min(one, left) for one in arr)
        total_2 = sum(min(one, left-1) for one in arr)
        return left if abs(total_1-target) < abs(total_2-target) else left-1
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章