leetcode 50. Pow(x, n)-细说边界问题 - lovechara - 博客频道 - CSDN.NET



leetcode 50. Pow(x, n)-细说边界问题 - lovechara - 博客频道 - CSDN.NET

【思路1-Java】递归实现

采用递归实现,那么本题的终止条件是 n == 0 和 n == 1。这里不采用下面的做法:

public class Solution {     public double myPow(double x, int n) {         if(n == 0) return 1;         if(n == 1) return x;         return myPow(x, n-1) * x;     } }

 因为时间复杂度为 O(n),加上题目的限制会超时。但同时我们也不采用下面的做法:
public class Solution {     public double myPow(double x, int n) {         if(n == 0) return 1;         if(n == 1) return x;         return myPow(x, n / 2) * myPow(x, n / 2);     } }
时间复杂度真的下降为 O(logn)了吗?非也,由于递归的特性——无法记录下中间结果, myPow(x, n / 2) 被计算了两次,因此复杂度为 O(log(2^n)) = O(n),也会超时。
我们最好用一个值两记录下中间变量,充分利用好中间结果,克服这种毛病。

另外,本题的难点主要是在边界条件:如果 n < 0,是不是 n = -n, x = 1 / x ,再进行递归就能解决了呢?如果 n = Intege.MIN_VALUE,n = -n 会出现溢出,怎么办呢?我们可以先将 n / 2 赋值给 t,再将 t = -n,就不会出现溢出问题。

public class Solution { 

Read full article from leetcode 50. Pow(x, n)-细说边界问题 - lovechara - 博客频道 - CSDN.NET


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