1. 程式人生 > >計算1-N中第K小的數字(按字典序排序)

計算1-N中第K小的數字(按字典序排序)

    public static int calK(int n, int k) {
        if (k > n) {
            return 0;
        }
        int target = 1;
        for (int i = 2; i <= k; i++) {
            target = next(target, n);
        }
        return target;
    }

    private static int next(int start, int n) {
        if
(start == n) { return start / 10 + 1; } if (start > 10 && start % 10 == 9) { return after9(start,n); } int tmp = start * 10; if (tmp <= n) { return tmp; } return start + 1; } private static
int after9(int m, int n) { int tmp = m * 10; if (tmp <= n) { return tmp; } tmp = m + 1; tmp /= 10; while (tmp % 10 == 0) { tmp /= 10; } if (tmp < 10) { return tmp; } return (m + 1) / 10
; }

相關推薦

計算1-NK數字(字典排序)

public static int calK(int n, int k) { if (k > n) { return 0; } int target = 1;

BFPRT演算法:時間複雜度O(n)求k數字(分治演算法+快排)

去年寫了一篇《分治演算法 求第 k k k小元素

分治演算法求N個數K(大)的數

這個學期開演算法課,跟著進度寫寫程式碼就好。這周講分治,說到了求N個數中第K小(大)數的問題,寫寫看。 分治演算法的複雜度是O(n),用到了快速排序的思路:先選取一個參考數進行一次快排,拿升序來說的話,快排之後左邊所有數<參考數,右邊所有數>參考數,然後根據左右

尋找陣列k的數:平均情況下時間複雜度為O(n)的快速選擇演算法

又叫線性選擇演算法,這是一種平均情況下時間複雜度為O(n)的快速選擇演算法,用到的是快速排序中的第一步,將第一個數作為中樞,使大於它的所有數放到它右邊,小於它的所有數放到它左邊。之後比較該中樞的最後位

選擇問題(選擇數組K的數)

++i bsp 裝逼 mes tof quick 復雜度 names 返回 由排序問題可以引申出選擇問題,選擇問題就是選擇並返回數組中第k小的數,如果把數組全部排好序,在返回第k小的數,也能正確返回,但是這無疑做了很多無用功,由上篇博客中提到的快速排序,稍稍修改下就

leetcode 二叉搜索樹K的元素 python

binary rap wid div append idt 示例 src 查找 二叉搜索樹中第K小的元素 給定一個二叉搜索樹,編寫一個函數 kthSmallest 來查找其中第 k 個最小的元素。 說明:你可以假設 k 總是有效的,1 ≤ k

LeetCode 230. 二叉搜索樹K的元素 (平衡樹)

如何 attack 有效 tac 並且 att eno del root 題目 給定一個二叉搜索樹,編寫一個函數 kthSmallest 來查找其中第 k 個最小的元素。 說明: 你可以假設 k 總是有效的,1 ≤ k ≤ 二叉搜索樹元素個數。 示例 1: 輸入: root

LeetCode-230 kth smallest element in a bst 二叉搜尋樹K的元素

題目連結 https://leetcode-cn.com/problems/kth-smallest-element-in-a-bst/ 題意 中文題,對於二叉搜尋樹而言,找其中的第K小的數 題解         很有趣的題,但是很簡單

Leetcode--378. 有序矩陣K的元素

給定一個 n x n 矩陣,其中每行和每列元素均按升序排序,找到矩陣中第k小的元素。 請注意,它是排序後的第k小元素,而不是第k個元素。 示例: matrix = [ [ 1, 5, 9], [10, 11, 13], [12, 13, 15] ],

leet230. 二叉搜尋樹K的元素

題目: 給定一個二叉搜尋樹,編寫一個函式kthSmallest來查詢其中第k個最小的元素。 注意:你可以假設k總是有效的,1≤ k ≤二叉搜尋樹元素個數。 進階:如果經常修改二叉搜尋樹(插入/刪除操作)並且你需要頻繁地找到第k小值呢? 你將如何優化kthSmallest函式? 分析:

08頭條實習生面試_字典K數字

LeetCode(440) 字典序的第K小數字 思路: 其實這是一個"十叉樹",如下圖: 1)每個節點的子節點可以有十個,比如節點1的子節點可以是10~19、節點2的位元組的可以是20~29、。。。 但是由於n大小的限制,構成的並不是一個"滿十叉樹"。 2)分

【LeetCode】230. 二叉搜尋樹K的元素 結題報告 (C++)

原題地址:https://leetcode-cn.com/problems/kth-smallest-element-in-a-bst/submissions/ 題目描述: 給定一個二叉搜尋樹,編寫一個函式 kthSmallest 來查詢其中第 k 個最小的元素。 說明: 你可以假設 k

[Leetcode230]二叉搜尋樹K的元素

給定一個二叉搜尋樹,編寫一個函式 kthSmallest 來查詢其中第 k 個最小的元素。 還是那句話,樹,優先考慮遞迴。 python: # Definition for a binary tree node. # class TreeNode(object): # def _

Leetcode 230. 二叉搜尋樹K的元素 C++

題目描述 方法一(中序歷遍思想) 使用樹的中序歷遍,對於二叉搜尋樹,樹的中序歷遍得到的就是按照從小到大排序的一個序列。這裡做了適當的改進,歷遍的時候不再將數值儲存到一個數組中,這樣就不需要佔用記憶體。直接通過記錄當前歷遍到第 i 個值(即第 i 大的數),和要求的 K 比較,相

LeetCode:230. 二叉搜尋樹K的元素

1、題目描述 給定一個二叉搜尋樹,編寫一個函式 kthSmallest 來查詢其中第 k 個最小的元素。 說明:你可以假設 k 總是有效的,1 ≤ k ≤ 二叉搜尋樹元素個數。 示例 1: 輸入: root = [3,1,4,null,2], k = 1

Leetcode---二叉搜尋樹K的元素--遞迴

二叉搜尋樹中第K小的元素 題目連結:二叉搜尋樹中第K小的元素 思路: 中序遍歷一個二叉搜尋樹,得到的是一個有序序列 根據這個原理,我們使用遞迴遍歷,僅需要找到第K次彈棧的元素即可 程式碼: int count = 0; int val = 0;

LeetCode--230.二叉搜尋樹K的元素(JavaScript)

給定一個二叉搜尋樹,編寫一個函式 kthSmallest 來查詢其中第 k 個最小的元素。 說明: 你可以假設 k 總是有效的,1 ≤ k ≤ 二叉搜尋樹元素個數。 示例 1: 輸入: root = [3,1,4,null,2], k = 1 3 / \ 1 4

bfprt 演算法 (陣列K 問題問題)

一:背景介紹 在一堆數中求其前 k 大或前 k 小的問題,簡稱 TOP-K 問題。而目前解決 TOP-K 問題最有效的演算法即是 BFPRT 演算法,又稱為中位數的中位數演算法,該演算法由 Blum、Floyd、Pratt、Rivest、Tarjan 提出,最壞

230. 二叉搜尋樹K的元素(中等,樹)

 給定一個二叉搜尋樹,編寫一個函式 kthSmallest 來查詢其中第 k 個最小的元素。 說明: 你可以假設 k 總是有效的,1 ≤ k ≤ 二叉搜尋樹元素個數。 示例 1: 輸入: root = [3,1,4,null,2], k

Kth Smallest Element in a BST 二叉搜尋樹K的元素

給定一個二叉搜尋樹,編寫一個函式kthSmallest來查詢其中第 k 個最小的元素。說明:你可以假設 k 總是有效的,1 ≤ k ≤ 二叉搜尋樹元素個數。示例 1:輸入: root = [3,1,4,null,2], k = 1 輸出: 1示例 2:輸入: root = [