幾乎每乙個人都用 乘法表。但是你能在乘法表中快速找到第k
小的數字嗎?給定高度m
、寬度n
的一張m * n
的乘法表,以及正整數k
,你需要返回表中第k
小的數字。
215,373,378,719,786 都是一些類似的題,可以一起做一下。我的實現。輸入: m = 3, n = 3, k = 5
輸出: 3
解釋:
乘法表:
1 2 3
2 4 6
3 6 9
第5小的數字是 3 (1, 2, 2, 3, 3).
注釋class
solution
return low;}}
;
class
solution
return count;
}int
findkthnumber
(int m,
int n,
int k)
else right = mid;
//temp >= k, 在temp>k時,為什麼不取 right = mid-1,而是right = mid。因為我們的目標值可能存在重複,比如 123334,如果我選擇要找第3小的數,而mid當前恰好=3,那麼temp得到的結果會是5(<=mid)。如果我們選擇right = mid-1=2。那麼將會執行錯誤導致結果錯誤。在temp = k時,為什麼不能立馬返回結果呢,而是繼續執行縮小邊界?因為我們當前的mid可能是乙個不在乘法表中的值,畢竟mid=(left+right) >> 1; 所以立即返回可能返回錯誤答案。所以一定收縮範圍 直到left=right。最終返回的一定是正確值(若答案t的temp = k, 而某一非錶值x的temp也=k, 那麼t一定比x小,最終x也會被right縮小導致出局)。
}return left;}}
;
Leetcode 668 乘法表中第k小的數
幾乎每乙個人都用 乘法表 但是你能在乘法表中快速找到第k小的數字嗎?給定高度m 寬度n 的一張 m n的乘法表,以及正整數k,你需要返回表中第k 小的數字。例 1 輸入 m 3,n 3,k 5 輸出 3 解釋 乘法表 1 2 3 2 4 6 3 6 9 第5小的數字是 3 1,2,2,3,3 例 2...
乘法表問題
include iostream include algorithm include fstream using namespace std f i j 0 表示在ch i ch j 之間以某種方式加括號後,結果為a f i j 1 表示在ch i ch j 之間以某種方式加括號後,結果為b f i...
3 5乘法表問題
問題描述 定義於字母表上的乘法表如下 a b c a b b a b c b a c a c c 依此乘法表,對任一定於於該錶上的字串,適當加括號後得到乙個表示式。例如對於字串x bbbba,它的乙個加括號表示式為 b bb ba 依乘法表,該表示式的值為a。試設計乙個動態規劃演算法,對任一於該字母...