今�Hの国の呵呵君: [Algorithm]Hill



今�Hの国の呵呵君: [Algorithm]Hill

Given an array of integer elements
Your task is to
  • write a function that finds the minimum value X that makes possible the following: generate a new array that is sorted in strictly ascending order by increasing or decreasing each of the elements of the initial array with integer values in the [0, X] range.
    • Example: Having the initial array [5, 4, 3, 2, 8] the minimum value for X is 3. Decrease the first element (5) by 3, decrease the second one (4) by 1, increase the third one (3) by 1, increase the forth one (2) by 3 and do nothing to the last one (8). In the end we obtain the array [2, 3, 4, 5, 8] which is sorted in strictly ascending order.
  • print the result X to the standard output (stdout)
这一题乍看之下感觉不太好做,其实仔细分析一下还是比较简单的,我们首先定义distance:两个数之间的distance代表要让这两个数变成strictly ascending要在第二个数上加的最小值,也就是说对于两个数A[i],A[j],distance(i, j) = max(A[i] + (j - i) - A[j], 0),distance永远大于等于0。所以这题就转化成了我们要求数组里的max distance,返回的时候我们返回(maxDis + 1) / 2。
为了在O(n)时间求出来我们依然要使用DP,globalMax[i]是到A[i]为止最大的distance,localMax[i]是到A[i]为止最大的distance,并且第二个数为A[i]。DP方程为:
  • globalMax[i] = max(localMax[i], global[i - 1]);
  • localMax[i] = max(localMax[i - 1] + A[i - 1] - A[i] + 1, A[i - 1] - A[i] + 1, 0)

Read full article from 今�Hの国の呵呵君: [Algorithm]Hill


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