ETH官方钱包

前往
大廳
主題

LeetCode - 1387. Sort Integers by The Power Value 解題心得

Not In My Back Yard | 2024-08-05 12:00:01 | 巴幣 0 | 人氣 44

題目連結(jié):


題目意譯:
一個整數(shù) x 的力量值被定義為根據(jù)以下步驟將 x 變?yōu)?1 所需的步驟:
    如果 x 為偶數(shù),則 x = x / 2
    如果 x 為奇數(shù),則 x = 3 × x + 1

例如說,x = 3 的力量值為 7 因為 3 需要 7 個步驟才會抵達(dá) 1(3 --> 10 --> 5 --> 16 --> 8 --> 4 --> 2 --> 1)。

給定三個整數(shù) lo 、 hi 和 k。你的任務(wù)是將區(qū)間 [lo, hi] 中所有整數(shù)按照力量值由升序順序排序,如果兩個或以上的整數(shù)有著相同的力量值,則按數(shù)值本身升序順序排序。

回傳排序後的區(qū)間 [lo, hi] 的第 k 個整數(shù)。

注意到對於任意整數(shù) x(lo ≦ x ≦ hi)都保證 x 可以藉由上述步驟變?yōu)?1,且其步驟數(shù)必定可以被一個 32 位元有號整數(shù)所容納。

限制:
1 ≦ lo ≦ hi ≦ 1000
1 ≦ k ≦ hi - lo + 1



範(fàn)例測資:
範(fàn)例 1:
輸入: lo = 12, hi = 15, k = 2
輸出: 13
解釋: 12 力量值為 9 (12 --> 6 --> 3 --> 10 --> 5 --> 16 --> 8 --> 4 --> 2 --> 1)
13 力量值為 9
14 力量值為 17
15 力量值為 17
經(jīng)過力量值排序後的區(qū)間為 [12,13,14,15]。對於 k = 2,答案為第二個元素,其為 13。
注意到 12 和 13 有著相同力量值,而我們將會按數(shù)值來升序地排序。14 和 15 也是同理。

範(fàn)例 2:
輸入: lo = 7, hi = 11, k = 4
輸出: 7
解釋: 對應(yīng)的力量值陣列 [7, 8, 9, 10, 11] 為 [16, 3, 19, 6, 14]。
根據(jù)力量值排序後的區(qū)間為 [8, 10, 11, 7, 9]。
排序後第四個數(shù)字為 7。


解題思維:
就單純地 lo ~ hi 中每個數(shù)字跑過一次題目定義的過程即可。而可以看到如果對於某一個數(shù)字 x 來說在某一個時刻點遇到先前已經(jīng)處理過的數(shù)字 x',則 x 的當(dāng)前步驟數(shù)可以直接加上 x' 的,而不須重複計算。

之後按照題目定義的排序方式排序即可然後取第 k 個元素即可(注意開頭元素的索引值是從 0 開始還是 1)。




此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。

創(chuàng)作回應(yīng)

更多創(chuàng)作