按字典顺序排列的数字从1到N的第K个数字

时间:2018-03-03 06:30:26

标签: string algorithm sorting time-complexity

给定一个整数N,在从字典排序的数字数组中找到从1到N的第k个排序。

Ex:N = 12

按字典顺序排序的数字是:[1,10,11,12,2,3,4,5,6,7,8,9]

如果K = 4,程序应返回:12。

程序的复杂性应为O(logN)。

生成数组是为了解释而不是作为输入提供。生成数组和排序将占用Nlog(N)时间,从而无法实现目的。

我最近在面试过程中遇到了这个问题。无法在给定的时间复杂度中找出解决方案,因此寻求帮助

谢谢!

1 个答案:

答案 0 :(得分:2)

我们取N = 13000,K = 12031.当指定为最左边时,每个数字从1到9得到:

                                      total
1 single digit number 9 * 1              9
10 two-digit numbers  9 * 10            99
100 three-digit numbers 9 * 100        999
1000 four-digit numbers 9 * 1000      9999
10000 five-digit numbers      --->  here we have to start examining

                                             Total
                                             ----
1 gets 13000 - 8 * (1 + 10 + 100 + 1000)  =  4112 of them
2 gets 1111                                  5223
3 gets 1111                                  6334
4 gets 1111                                  7445
5 gets 1111                                  8556
6 gets 1111                                  9667
7 gets 1111                                  10778
8 gets 1111                                  11889
9 gets 1111 ----> answer is somewhere here 

答案:9xxx。现在是第二个数字。对于以一个或多个零结尾的每个数字,我们必须使用等效前缀计算所有较低的数字。

3 numbers with zero or nothing before 9000   11892
9 90 900

100 + 9 numbers with 90xx
9000 9001 9002.., but also 901 902..         12001

答案:91xx。第三位数。

2 numbers with zero or nothing before 9100
91 910                                       12003

10 four-digit numbers with 0 as third digit
9100 9101 9102..                             12013

1 number with zero or nothing before 9110
911                                          12014

10 numbers with 1 as third digit
9110 9111 9112..                             12024

1 number with zero or nothing before 9120
912                                          12025

+ 6

答案:9126