LeetCode 1755. 最接近目标值的子序列和(状态枚举 + 双指针)
生活随笔
收集整理的這篇文章主要介紹了
LeetCode 1755. 最接近目标值的子序列和(状态枚举 + 双指针)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 1. 題目
- 2. 解題
1. 題目
給你一個整數數組 nums 和一個目標值 goal 。
你需要從 nums 中選出一個子序列,使子序列元素總和最接近 goal 。
也就是說,如果子序列元素和為 sum ,你需要 最小化絕對差 abs(sum - goal) 。
返回 abs(sum - goal) 可能的 最小值 。
注意,數組的子序列是通過移除原始數組中的某些元素(可能全部或無)而形成的數組。
示例 1: 輸入:nums = [5,-7,3,5], goal = 6 輸出:0 解釋:選擇整個數組作為選出的子序列,元素和為 6 。 子序列和與目標值相等,所以絕對差為 0 。示例 2: 輸入:nums = [7,-9,15,-2], goal = -5 輸出:1 解釋:選出子序列 [7,-9,-2] ,元素和為 -4 。 絕對差為 abs(-4 - (-5)) = abs(1) = 1 ,是可能的最小值。示例 3: 輸入:nums = [1,2,3], goal = -7 輸出:7提示: 1 <= nums.length <= 40 -10^7 <= nums[i] <= 10^7 -10^9 <= goal <= 10^9來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/closest-subsequence-sum
著作權歸領扣網絡所有。商業轉載請聯系官方授權,非商業轉載請注明出處。
2. 解題
- 直接枚舉,時間復雜度 240≈10122^{40} \approx 10^{12}240≈1012,肯定超時
- 分治枚舉,取出一半來枚舉 220≈1062^{20} \approx 10^6220≈106,然后對兩半邊的狀態排序,雙指針求解
1180 ms 29.2 MB C++
我的CSDN博客地址 https://michael.blog.csdn.net/
長按或掃碼關注我的公眾號(Michael阿明),一起加油、一起學習進步!
總結
以上是生活随笔為你收集整理的LeetCode 1755. 最接近目标值的子序列和(状态枚举 + 双指针)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LeetCode MySQL 1097.
- 下一篇: LeetCode 1129. 颜色交替的