1387 將整數按權重排序

2021-10-18 18:11:31 字數 1605 閱讀 9380

題目描述:

我們將整數 x 的 權重 定義為按照下述規則將 x 變成 1 所需要的步數:

如果 x 是偶數,那麼 x = x / 2

如果 x 是奇數,那麼 x = 3 * x + 1

比方說,x=3 的權重為 7 。因為 3 需要 7 步變成 1 (3 --> 10 --> 5 --> 16 --> 8 --> 4 --> 2 --> 1)。

給你三個整數 lo, hi 和 k 。你的任務是將區間 [lo, hi] 之間的整數按照它們的權重 公升序排序 ,如果大於等於 2 個整數有 相同 的權重,那麼按照數字自身的數值 公升序排序 。

請你返回區間 [lo, hi] 之間的整數按權重排序後的第 k 個數。

注意,題目保證對於任意整數 x (lo <= x <= hi) ,它變成 1 所需要的步數是乙個 32 位有符號整數。

示例 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

區間內的數按權重排序以後的結果為 [12,13,14,15] 。對於 k = 2 ,答案是第二個整數也就是 13 。

注意,12 和 13 有相同的權重,所以我們按照它們本身公升序排序。14 和 15 同理。

示例 2:

輸入:lo = 1, hi = 1, k = 1

輸出:1

示例 3:

輸入:lo = 7, hi = 11, k = 4

輸出:7

解釋:區間內整數 [7, 8, 9, 10, 11] 對應的權重為 [16, 3, 19, 6, 14] 。

按權重排序後得到的結果為 [8, 10, 11, 7, 9] 。

排序後陣列中第 4 個數字為 7 。

示例 4:

輸入:lo = 10, hi = 20, k = 5

輸出:13

示例 5:

輸入:lo = 1, hi = 1000, k = 777

輸出:570

1 <= lo <= hi <= 1000

1 <= k <= hi - lo + 1

方法1:

(1)使用大頂堆,並一直保證堆的大小不超過k;

class

solution

else

}return res;

}int

getkth

(int lo,

int hi,

int k));

++lo;

if(q.

size()

>k)

}return q.

top(

).second;

//返回當前堆頂的數字}}

;

Leetcode 1387 將整數按權重排序

1387.將整數按權重排序 我們將整數 x 的 權重 定義為按照下述規則將 x 變成 1 所需要的步數 如果 x 是偶數,那麼 x x 2 如果 x 是奇數,那麼 x 3 x 1 比方說,x 3 的權重為 7 因為 3 需要 7 步變成 1 3 10 5 16 8 4 2 1 給你三個整數 lo,h...

5350 將整數按權重排序

我們將整數 x 的 權重 定義為按照下述規則將 x 變成 1 所需要的步數 如果 x 是偶數,那麼 x x 2 如果 x 是奇數,那麼 x 3 x 1 比方說,x 3 的權重為 7 因為 3 需要 7 步變成 1 3 10 5 16 8 4 2 1 給你三個整數 lo,hi 和 k 你的任務是將區間...

Leetcode 5350 將整數按權重排序

我們將整數 x 的 權重 定義為按照下述規則將 x 變成 1 所需要的步數 如果 x 是偶數,那麼 x x 2 如果 x 是奇數,那麼 x 3 x 1 比方說,x 3 的權重為 7 因為 3 需要 7 步變成 1 3 10 5 16 8 4 2 1 給你三個整數 lo,hi 和 k 你的任務是將區間...