31. Next Permutation \ 33. Search in Rotated Sorted Array
2017-01-21 11:03
281 查看
next permutation
算法思想
实现
Search in Rotated Sorted Array
然后是O(logN):这个的速度还不如上面那个,估计是用了假的测试集(测试集比较短)
算法思想
实现
Search in Rotated Sorted Array
31. next permutation
算法思想
对当前排列从后向前扫描,找到一对为升序的相邻元素,记为i和j(i < j)。如果不存在这样一对为升序的相邻元素,则所有排列均已找到,算法结束;否则,重新对当前排列从后向前扫描,找到第一个大于i的元素k,交换i和k,然后对从j开始到结束的子序列反转,则此时得到的新排列就为下一个字典序排列。这种方式实现得到的所有排列是按字典序有序的,这也是C++ STL算法next_permutation的思想。实现
class Solution { public: void nextPermutation(vector<int>& nums) { int nums_len = nums.size() - 1; int ind, stop_point = -1; for(ind = nums_len; ind > 0; ind--) { if(nums[ind-1] < nums[ind]) { stop_point = ind; break; } } if(ind >= 1) { int bigger_num = nums_len; while(nums[bigger_num] <= nums[ind-1]) { bigger_num--; } int tmp = nums[bigger_num]; nums[bigger_num] = nums[ind-1]; nums[ind-1] = tmp; reverse(nums.begin() + ind, nums.end()); } else { reverse(nums.begin(), nums.end()); } } };
33. Search in Rotated Sorted Array
首先是O(n)的做法,这个当然是比较差的。class Solution { public: int search(vector<int>& nums, int target) { int nums_len = nums.size() - 1; for(int i = 0; i <= nums_len; i++) { if(nums[i] == target) return i; } return -1; } };
然后是O(logN):这个的速度还不如上面那个,估计是用了假的测试集(测试集比较短)
class Solution { public: int search(vector<int>& nums, int target) { int n = nums.size(); int lo=0, hi=n-1; // find the index of the smallest value using binary search. // Loop will terminate since mid < hi, and lo or hi will shrink by at least 1. // Proof by contradiction that mid < hi: if mid==hi, then lo==hi and loop would have been terminated. while(lo < hi){ int mid=(lo+hi)/2; if(nums[mid] > nums[hi]) lo=mid+1; else hi=mid; } // lo==hi is the index of the smallest value and also the number of places rotated. int rot=lo; lo=0;hi=n-1; // The usual binary search and accounting for rotation. while(lo<=hi){ int mid=(lo+hi)/2; int realmid=(mid+rot)%n; if(nums[realmid]==target) return realmid; if(nums[realmid]<target) lo=mid+1; else hi=mid-1; } return -1; } };
相关文章推荐
- LeetCode(33)(81) Search in Rotated Sorted Array I II
- leetcode:33. Search in Rotated Sorted Array
- LeetCode 33. Search in Rotated Sorted Array
- leetcode--33. Search in Rotated Sorted Array
- 【C++】【LeetCode】33. Search in Rotated Sorted Array
- 33. Search in Rotated Sorted Array
- leetcode 33. Search in Rotated Sorted Array __java
- LeetCode OJ 33 Search in Rotated Sorted Array
- Leetcode 33. Search in Rotated Sorted Array (Hard) (cpp)
- Binary Search:33. Search in Rotated Sorted Array
- LeetCode 33 Search in Rotated Sorted Array 巧用递归二分法查找改造
- LeetCode-33.Search in Rotated Sorted Array
- Leetcode -- 33. Search in Rotated Sorted Array
- 33. Search in Rotated Sorted Array
- leetcode 33. Search in Rotated Sorted Array (复杂二分查找)
- [leetcode 33]Search in Rotated Sorted Array
- Leetcode 33. Search in Rotated Sorted Array
- 33 - Search in Rotated Sorted Array
- LeetCode 33. Search in Rotated Sorted Array
- 33. Search in Rotated Sorted Array(无敌2分)