Random Generator · LintCode题解



Random Generator · LintCode题解

给一个1到3的random generator,构造一个1到n的random generator。

+

Solution

用3进制数来求解。首先求出n至少需要几位3进制数来表示,假设需要x位。然后利用1到3的random generator来产生依次产生每一位上的随机数(因为3进制每一位上是0到2,所以要将得到的随机数-1)。再将得到的随机数转化为十进制整数。因为x位3进制的数能表示的十进制的数的范围是0~3^x - 1,因此得到的随机数可能比n大。如果得到的结果大于n,则重新产生随机数。

+

如果调用这个n random generator很多次,很可能产生很多次重复的随机数。因此,可以将得到的合法3进制的数及其对应的十进制的数保存在一个table里来优化时间。每次产生一个随机数,就和n比较,如果大于n,则重新产生,否则去table寻找其对应的十进制数。如果没有找到,则说明该随机数第一次产生,将该随机数的3进制及其十进制形式保存在table里。


Read full article from Random Generator · LintCode题解


No comments:

Post a Comment

Labels

Algorithm (219) Lucene (130) LeetCode (97) Database (36) Data Structure (33) text mining (28) Solr (27) java (27) Mathematical Algorithm (26) Difficult Algorithm (25) Logic Thinking (23) Puzzles (23) Bit Algorithms (22) Math (21) List (20) Dynamic Programming (19) Linux (19) Tree (18) Machine Learning (15) EPI (11) Queue (11) Smart Algorithm (11) Operating System (9) Java Basic (8) Recursive Algorithm (8) Stack (8) Eclipse (7) Scala (7) Tika (7) J2EE (6) Monitoring (6) Trie (6) Concurrency (5) Geometry Algorithm (5) Greedy Algorithm (5) Mahout (5) MySQL (5) xpost (5) C (4) Interview (4) Vi (4) regular expression (4) to-do (4) C++ (3) Chrome (3) Divide and Conquer (3) Graph Algorithm (3) Permutation (3) Powershell (3) Random (3) Segment Tree (3) UIMA (3) Union-Find (3) Video (3) Virtualization (3) Windows (3) XML (3) Advanced Data Structure (2) Android (2) Bash (2) Classic Algorithm (2) Debugging (2) Design Pattern (2) Google (2) Hadoop (2) Java Collections (2) Markov Chains (2) Probabilities (2) Shell (2) Site (2) Web Development (2) Workplace (2) angularjs (2) .Net (1) Amazon Interview (1) Android Studio (1) Array (1) Boilerpipe (1) Book Notes (1) ChromeOS (1) Chromebook (1) Codility (1) Desgin (1) Design (1) Divide and Conqure (1) GAE (1) Google Interview (1) Great Stuff (1) Hash (1) High Tech Companies (1) Improving (1) LifeTips (1) Maven (1) Network (1) Performance (1) Programming (1) Resources (1) Sampling (1) Sed (1) Smart Thinking (1) Sort (1) Spark (1) Stanford NLP (1) System Design (1) Trove (1) VIP (1) tools (1)

Popular Posts