日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

LeetCode hard 668. Kth Smallest Number in Multiplication Table(二分答案)

發布時間:2024/4/19 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LeetCode hard 668. Kth Smallest Number in Multiplication Table(二分答案) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目:https://leetcode.com/problems/kth-smallest-number-in-multiplication-table/description/

  • Kth Smallest Number in Multiplication Table
  • Nearly every one have used the Multiplication Table. But could you find out the k-th smallest number quickly from the multiplication table?

    Given the height m and the length n of a m * n Multiplication Table, and a positive integer k, you need to return the k-th smallest number in this table.

    Example 1:

    Input: m = 3, n = 3, k = 5
    Output:
    Explanation:
    The Multiplication Table:
    1 2 3
    2 4 6
    3 6 9

    The 5-th smallest number is 3 (1, 2, 2, 3, 3).

    Example 2:

    Input: m = 2, n = 3, k = 6
    Output:
    Explanation:
    The Multiplication Table:
    1 2 3
    2 4 6

    The 6-th smallest number is 6 (1, 2, 2, 3, 4, 6).

    Note:

    The m and n will be in the range [1, 30000].
    The k will be in the range [1, m * n]

    二分答案,用lower_bound和upper_bound的思想。

    這居然是一道hard題,難以置信,就這個難度啊。

    我被自己蠢哭了,把它當成ACM題,以為時間只有一秒,非要優化到O(n*log(n))。

    沒想到時間和空間復雜度O(n*m)就可以過了。

    不說了,第一次過hard題,20分鐘,直接上代碼把:

    class Solution { public:int findKthNumber(int m, int n, int k) {if(m > n) swap(m, n);int l = 1; int r = m*n;while(l < r){int mid = (l+r)/2;int p = judge(m, n, k, mid);// cout << p << " ";if(p == 1){return mid;}else if(p == 2){r = mid-1;}else if(p == 3){l = mid+1;}}return r;}int judge(int m, int n, int k, int mid){int sum1 = 0, sum2 = 0;for(int i = 1;i <= m; i++){if(i * n <= mid){sum2 += n;}else{sum2 += mid/i;}if(i * n < mid){sum1 += n;}else{sum1 += (mid-1)/i;}// cout << sum1 << endl;}cout << mid << " " << sum1 << " " << sum2 << endl;if(sum1 < k && sum2 >= k){return 1;}else if(sum1 >= k){return 2;}else if(sum2 < k){return 3;}} }; 與50位技術專家面對面20年技術見證,附贈技術全景圖

    總結

    以上是生活随笔為你收集整理的LeetCode hard 668. Kth Smallest Number in Multiplication Table(二分答案)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。