LeetCode: Jump Game



Given an array of non-negative integers, you are initially positioned at the first index of the array.Each element in the array represents your maximum jump length at that position.
Determine if you are able to reach the last index.
For example:
A = [2,3,1,1,4], return true.
A = [3,2,1,0,4], return false.
Using Greedy Algorithm
bool canJump(int A[], int n) {
if (0 == n)
            return false;
        int cur_max = A[0];
        int i = 0;
        while (i <= cur_max) {
            cur_max = max(cur_max, i + A[i]);
            
            if(cur_max >= n - 1)
                return true;
                
            ++i;
        }
        return false;
    }
bool canJump(int A[], int n) {       
        if (1 == n)
            return true;
        int i = 0;
        while (i < n)
        {
            int currMax = A[i] + i;
            
            if (0 == A[i])
                return false;
            if (currMax >= n - 1)
                return true;
                
            int tmpMax = 0;
            for (int j = i + 1; j <= currMax; ++j)
            {
                if (A[j] + j > tmpMax)
                {
                    tmpMax = A[j] + j;
                    i = j;
                }
            }
        }
        
        return (i >= n - 1);
    }
DP
bool canJump(int A[], int n) {
        bool ATag[n];
        for (int i = n - 1; i >= 0; --i)
        {
            ATag[i] = false;
            int maxReach = A[i] + i;
           
            if (maxReach >= n - 1)
            {
                ATag[i] = true;
                continue;
            }
           
            for (int j = maxReach; j > i; --j)
            {
                if (ATag[j])
                {
                    ATag[i] = true;
                    break;
                }
            }
        }
        return ATag[0];
    }
Read full article from Jump Game

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