mirror of
https://gitee.com/coder-xiaomo/leetcode-problemset
synced 2025-01-10 18:48:13 +08:00
49 lines
2.3 KiB
HTML
49 lines
2.3 KiB
HTML
<p>我们将整数 <code>x</code> 的 <strong>权重</strong> 定义为按照下述规则将 <code>x</code> 变成 <code>1</code> 所需要的步数:</p>
|
||
|
||
<ul>
|
||
<li>如果 <code>x</code> 是偶数,那么 <code>x = x / 2</code></li>
|
||
<li>如果 <code>x</code> 是奇数,那么 <code>x = 3 * x + 1</code></li>
|
||
</ul>
|
||
|
||
<p>比方说,x=3 的权重为 7 。因为 3 需要 7 步变成 1 (3 --> 10 --> 5 --> 16 --> 8 --> 4 --> 2 --> 1)。</p>
|
||
|
||
<p>给你三个整数 <code>lo</code>, <code>hi</code> 和 <code>k</code> 。你的任务是将区间 <code>[lo, hi]</code> 之间的整数按照它们的权重 <strong>升序排序 </strong>,如果大于等于 2 个整数有 <strong>相同</strong> 的权重,那么按照数字自身的数值 <strong>升序排序</strong> 。</p>
|
||
|
||
<p>请你返回区间 <code>[lo, hi]</code> 之间的整数按权重排序后的第 <code>k</code> 个数。</p>
|
||
|
||
<p>注意,题目保证对于任意整数 <code>x</code> <code>(lo <= x <= hi)</code> ,它变成 <code>1</code> 所需要的步数是一个 32 位有符号整数。</p>
|
||
|
||
<p> </p>
|
||
|
||
<p><strong>示例 1:</strong></p>
|
||
|
||
<pre>
|
||
<strong>输入:</strong>lo = 12, hi = 15, k = 2
|
||
<strong>输出:</strong>13
|
||
<strong>解释:</strong>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 同理。
|
||
</pre>
|
||
|
||
<p><strong>示例 2:</strong></p>
|
||
|
||
<pre>
|
||
<strong>输入:</strong>lo = 7, hi = 11, k = 4
|
||
<strong>输出:</strong>7
|
||
<strong>解释:</strong>区间内整数 [7, 8, 9, 10, 11] 对应的权重为 [16, 3, 19, 6, 14] 。
|
||
按权重排序后得到的结果为 [8, 10, 11, 7, 9] 。
|
||
排序后数组中第 4 个数字为 7 。
|
||
</pre>
|
||
|
||
<p> </p>
|
||
|
||
<p><strong>提示:</strong></p>
|
||
|
||
<ul>
|
||
<li><code>1 <= lo <= hi <= 1000</code></li>
|
||
<li><code>1 <= k <= hi - lo + 1</code></li>
|
||
</ul>
|