美文网首页
下一个排序

下一个排序

作者: Haward_ | 来源:发表于2019-09-26 16:02 被阅读0次

    描述:

    实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。

    思想:
    从右边的 i = nums.length-1 起,扫描到nums[i-1] = nums[i] ,则停止;继续从右边的 j = nums.length-1 起,扫描到第一个大于nums[i-1]的数停止;然后交换nums[i-1]和nums[j];最后把i-1右边的数反转。

    import java.util.Arrays;
    class Solution {
        public void nextPermutation(int[] nums) {
            if(nums==null || nums.length==0) {
                return;
            }
            int index = -1;
            for(int i=nums.length-1;i>=1;i--) {
                if(nums[i-1]<nums[i]) {
                    index = i-1;
                    break;
                }
            }
            if(index==-1) {
                Arrays.sort(nums);
            }else{
                int t = -1;
                for(int i=nums.length-1;i>=index;i--) {
                    if(nums[i]>nums[index]) {
                        t = i;
                        break;
                    }
                }
                int temp = nums[t];
                nums[t] = nums[index];
                nums[index] = temp;
                int i=index+1;
                int j=nums.length-1;
                while(i<j) {
                    int tm = nums[i];
                    nums[i] = nums[j];
                    nums[j] = tm;
                    i++;
                    j--;
                }
            }
         
        }
    }
    

    相关文章

      网友评论

          本文标题:下一个排序

          本文链接:https://www.haomeiwen.com/subject/fbcnuctx.html