Yu's Coding Garden : leetcode Question 61: Next permutation



Implement next permutation, which rearranges numbers into the lexicographically next greater permutation of numbers.
If such arrangement is not possible, it must rearrange it as the lowest possible order (ie, sorted in ascending order).
The replacement must be in-place, do not allocate extra memory.
Here are some examples. Inputs are in the left-hand column and its corresponding outputs are in the right-hand column.
1,2,3 → 1,3,2
3,2,1 → 1,2,3
1,1,5 → 1,5,1
From http://fisherlei.blogspot.com/2012/12/leetcode-next-permutation.html From right to left, find the fir5t digit (PartitionNumber)which violate the increase trend, in this example, 6 will be selected since 8,7,4,3,2 already in a increase trend.
From right to left, find the first digit which large than PartitionNumber, call it changeNumber Here the 7 will be selected.
Swap the PartitionNumber and ChangeNumber-
Reverse all the digit on the right of partition index

void nextPermutation(vector<int> &num) {  
// Start typing your C/C++ solution below  
// DO NOT write int main() function  
assert(num.size() >0);  
int vioIndex = num.size() -1;  
while(vioIndex >0)  
{  
if(num[vioIndex-1] < num[vioIndex])  
 break;  
vioIndex --;  
}  
if(vioIndex >0)  
{  
vioIndex--;
int rightIndex = num.size()-1;  
while(rightIndex >=0 && num[rightIndex] <= num[vioIndex])  
{  
 rightIndex --;  
}  
int swap = num[vioIndex];  
num[vioIndex] = num[rightIndex];  
num[rightIndex] = swap;    
vioIndex++;  
}  
int end= num.size()-1;  
while(end > vioIndex)  
{  
int swap = num[vioIndex];  
num[vioIndex] = num[end];  
num[end] = swap;  
end--;  
vioIndex++;  
}    
}
Also refer to http://fisherlei.blogspot.com/2012/12/leetcode-next-permutation.html
Read full article from Yu's Coding Garden : leetcode Question 61: Next permutation

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