最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(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ó)家法律
武义县| 金寨县| 唐山市| 余干县| 开阳县| 贵阳市| 福贡县| 昌图县| 克什克腾旗| 濮阳县| 海丰县| 宣恩县| 乌鲁木齐县| 浪卡子县| 咸宁市| 江源县| 彭阳县| 扶沟县| 文安县| 日土县| 乌鲁木齐县| 陕西省| 且末县| 申扎县| 烟台市| 孝昌县| 新巴尔虎右旗| 古浪县| 佛教| 驻马店市| 乐安县| 扶沟县| 上高县| 两当县| 莒南县| 富阳市| 奎屯市| 丰原市| 遂溪县| 雷州市| 团风县|