leetcode31. Next Permutation

来源:互联网 发布:电脑免费发信息软件 编辑:程序博客网 时间:2024/05/29 17:45

leetcode31. Next Permutation

class Solution {public:    void nextPermutation(vector<int>& nums) {        int right = nums.size() - 1;        if(right<=0) return ;        int max = INT_MIN;        int maxPos = right;        int newPos = 0;        int temp = 0;        while(right>=0){            if(max>nums[right]){                newPos = floor(binarySearchPos(nums,nums[right],maxPos,nums.size() - 1));                //cout<<newPos<<endl;                while(nums[newPos] == nums[right]) newPos++;                temp = nums[right];                nums[right] = nums[newPos];                nums[newPos] = temp;                quickSort(nums,right+1,nums.size() - 1);                break;            }else{                //cout<<max<<";"<<nums[right]<<endl;                max=nums[right];                maxPos = right;                right--;            }        }        if(right<0){            quickSort(nums,0,nums.size() - 1);        }       // for(int i=0;i<nums.size();i++){       //     cout<<nums[i]<<",";       // }    }        double binarySearchPos(vector<int>& nums1, double num, int start, int end) {        int left = start, right = end, medium = 0;        while (left<right) {            medium = left + (right - left) / 2;            if (nums1[medium] - num <0.4) {                right = medium;            }            else if (num - nums1[medium] <0.4) {                left = medium + 1;            }            else {                return medium;            }        }        double left1;        if (nums1[left] - num>0.4 && num - nums1[left] >0.4)            left1 = left;        else if (nums1[left] - num<0.4) {            left1 = left - 0.5;        }        else {            left1 = left + 0.5;        }        return  left1;    }    void quickSort(vector<int>& nums,int left,int right){        int temp = 0;        while(left<right){            temp  = nums[left];            nums[left] = nums[right];             nums[right] = temp;             left++;            right--;        }    }};