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

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

【算法解析】把int數(shù)組之和—減半,需要最少操作多少次?

2023-08-11 18:22 作者:solyn  | 我要投稿

假設(shè)有一個(gè)需求吧,數(shù)組減半可能都會(huì),那要是想要數(shù)組的和減半,最少操作多少次怎么算。

每一次操作中,你可以從數(shù)組中選擇任意的一個(gè)數(shù)并將它減小到一半。

請(qǐng)問(wèn),減少到總數(shù)的一半的時(shí)候,最少需要多少次?


理論分析

那要把數(shù)組整個(gè)減少一半,只需要循環(huán)就行了,但是現(xiàn)在要求的是數(shù)組的合減半。需要多少次?

請(qǐng)你返回傳入nums數(shù)組返回最小的操作數(shù)。

思路:肯定是大的數(shù)先減半,他們的和降的最快啊。

比如:

輸入:nums = [5,19,8,1]
輸出:3
解釋:初始 nums 的和為 5 + 19 + 8 + 1 = 33 。
以下是將數(shù)組和減少至少一半的一種方法:
選擇數(shù)字 19 并減小為 9.5 。
選擇數(shù)字 9.5 并減小為 4.75 。
選擇數(shù)字 8 并減小為 4 。
最終數(shù)組為 [5, 4.75, 4, 1] ,和為 5 + 4.75 + 4 + 1 = 14.75 。
nums 的和減小了 33 - 14.75 = 18.25 ,減小的部分超過(guò)了初始數(shù)組和的一半,18.25 >= 33/2 = 16.5 。
我們需要 3 個(gè)操作實(shí)現(xiàn)題目要求,所以返回 3 。
可以證明,無(wú)法通過(guò)少于 3 個(gè)操作使數(shù)組和減少至少一半。

這段代碼是一個(gè)解決方案類,其中的halveArray方法用于計(jì)算將數(shù)組分成兩半所需的最小操作次數(shù)。

代碼中使用了優(yōu)先隊(duì)列(PriorityQueue)來(lái)保存數(shù)組元素的一半,并按照降序進(jìn)行排序。首先,對(duì)數(shù)組進(jìn)行遍歷,計(jì)算數(shù)組元素之和并將元素的一半加入到優(yōu)先隊(duì)列中。

接下來(lái),將目標(biāo)值設(shè)為數(shù)組元素之和的一半,即target = sum * 1.0 / 2。然后,進(jìn)入循環(huán),通過(guò)不斷地將隊(duì)列中的最大值取出并進(jìn)行操作,直到操作結(jié)果大于等于目標(biāo)值。

在循環(huán)中,首先使用que.poll()方法取出隊(duì)列中的最大值,并將其一半加入到隊(duì)列中。然后,操作結(jié)果res累加上取出元素的一半,并將新的一半加入到隊(duì)列中。同時(shí),操作次數(shù)count也進(jìn)行累加。

最后,返回操作次數(shù)count,即為將數(shù)組分成兩半所需的最小操作次數(shù)。

需要注意的是,代碼中使用了long型變量sum來(lái)保存數(shù)組元素之和,以避免整數(shù)相加時(shí)溢出的問(wèn)題。此外,將數(shù)值與1.0相乘是為了將整數(shù)轉(zhuǎn)換為double類型,以保證計(jì)算結(jié)果的精度。


【算法解析】把int數(shù)組之和—減半,需要最少操作多少次?的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
分宜县| 河源市| 县级市| 阜康市| 镇安县| 湖北省| 密云县| 三门峡市| 民和| 宁乡县| 许昌县| 永昌县| 镇康县| 桐乡市| 嘉义县| 萝北县| 崇左市| 临邑县| 青海省| 阳山县| 德钦县| 扬中市| 攀枝花市| 桦南县| 根河市| 睢宁县| 绿春县| 昆山市| 无极县| 浠水县| 司法| 牡丹江市| 保靖县| 方山县| 南乐县| 金昌市| 克拉玛依市| 双鸭山市| 景东| 龙岩市| 新巴尔虎左旗|