五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

leetcode刷題筆記: 1785 minimum-elements-to-add-to-form-a-given-sum

2022-12-16 12:31 作者:StepfenShawn  | 我要投稿

好久沒寫博客了,今天就寫篇博客記錄一下leetcode上的每日一題吧! 這其實(shí)是一道數(shù)學(xué)題(貪心算法嚴(yán)格上是運(yùn)籌學(xué)的內(nèi)容,也可以說是數(shù)學(xué)吧), 我會帶大家從 0 開始證明貪心算法的性質(zhì)。

題目地址:

https://leetcode.cn/problems/minimum-elements-to-add-to-form-a-given-sum/

minimum-elements-to-add-to-form-a-given-sum

You are given an integer array nums and two integers limit and goal. The array nums has an interesting property that abs(nums[i]) <= limit.

Return the minimum number of elements you need to add to make the sum of the array equal to goal. The array must maintain its property that abs(nums[i]) <= limit.

Note that abs(x) equals x if x >= 0, and -x otherwise.


Example 1:

Input: nums = [1,-1,1], limit = 3, goal = -4

Output: 2

Explanation: You can add -2 and -3, then the sum of the array will be 1 - 1 + 1 - 2 - 3 = -4.

Example 2:

Input: nums = [1,-10,9,1], limit = 100, goal = 0

Output: 1


題目大意是給你一個(gè)數(shù)組 nums 和兩個(gè)變量 limit, goal, 其中 nums 里面的每一個(gè)值 x 都要滿足?其絕對值%7Cx%7C%20%3C%3D limit, 要求的是向里面添加最少多少個(gè)元素使得和等于 goal。(注意添加的元素也要滿足nums的性質(zhì))。


證明該問題的貪心性質(zhì)

題目要求我們添加的元素盡可能少,首先我們先考慮動態(tài)規(guī)劃是否能解決這個(gè)問題,首先我們把問題化為最小規(guī)模(這是動規(guī)和貪心最重要的思想),?也就是考慮我們只需添加一個(gè)元素時(shí), 假設(shè)這個(gè)元素為?m, 那么?m 必定屬于%5B1%2C%20limit%5D, 注意這里?m不能為 0, 因?yàn)閷?0 添加進(jìn)去對答案并沒有貢獻(xiàn), 并且還違背了添加的次數(shù)盡可能少的原則。

我們確定了子問題中添加進(jìn)去的?m?的范圍后, 我們還需要證明這個(gè)問題的最優(yōu)子結(jié)構(gòu)(無論是動態(tài)規(guī)劃還是貪心問題都需要這一步,否則無法使用這兩種算法)。

假設(shè)我們得到了一組要添加的元素的解 (m1%2C%20m2%2C%20m3%2C...)并且這組解是最優(yōu)解, 如果我們找到了另外一組解 (m1'%2C%20m2'%2C%20m3'%2C%20...)??比??(m1%2C%20m2%2C%20m3%2C...)更優(yōu)(在題目里面指的是長度最短), 那么與假設(shè)?(m1%2C%20m2%2C%20m3%2C...)是最優(yōu)解矛盾了。所以我們通過反證法證明了該問題具有最優(yōu)子結(jié)構(gòu)。?

證明了最優(yōu)子結(jié)構(gòu),我們觀察子問題的關(guān)系可知當(dāng)我們每次選擇添加的元素?m 等于 limit 時(shí)得到的一定是最優(yōu)解(這可以用反證法證明), 為什么呢,我們可以從直觀上理解,假如我選擇了一個(gè)值為 limit的元素添加到了nums中, 如果此時(shí)數(shù)組的和sum'大于sum, 那么我們也一定能添加一個(gè)比limit小的元素,如果 sum'?<=?sum了?,?那么這樣的選擇會保證整個(gè)過程的次數(shù)是最少的,然而貪心算法的思想就是每次都做出最優(yōu)的選擇, 那么我們就可以使用貪心算法了:


上面的代碼時(shí)間復(fù)雜度有點(diǎn)高, 我們發(fā)現(xiàn) while 循環(huán)有點(diǎn)像在做除法, 其實(shí)我們得答案為

%5Clceil%20%5Cfrac%7Bdiff%7D%7Blimit%7D%20%5Crceil%20?

由于 c++ 里面 int 相除是向下取整, 那么我們可以把這個(gè)式子化簡成 向下取整:

%5Clfloor%5Cfrac%7Bdiff%20%2B%20limit%20-%201%7D%7Blimit%7D%20%20%5Crfloor%20,?


leetcode刷題筆記: 1785 minimum-elements-to-add-to-form-a-given-sum的評論 (共 條)

分享到微博請遵守國家法律
洪洞县| 西和县| 惠安县| 若羌县| 大邑县| 巴马| 陵水| 潜山县| 凉山| 巴林左旗| 绩溪县| 虹口区| 松潘县| 新郑市| 南阳市| 图片| 浦北县| 定襄县| 监利县| 酉阳| 东乌珠穆沁旗| 启东市| 青铜峡市| 连平县| 灯塔市| 增城市| 乌拉特前旗| 方城县| 遵化市| 新泰市| 德兴市| 西和县| 平昌县| 宁都县| 图片| 西乌| 正镶白旗| 娄烦县| 共和县| 磴口县| 宽城|