- 1.题目
- 2.思路
- 3.代码实现(Java)
实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。必须原地修改,只允许使用额外常数空间。
示例 1: 输入:nums = [1,2,3] 输出:[1,3,2]
示例 2: 输入:nums = [3,2,1] 输出:[1,2,3]
示例 3: 输入:nums = [1,1,5] 输出:[1,5,1]
示例 4: 输入:nums = [1] 输出:[1]
提示: 1 = 0) { int j = binarySearch(nums, i + 1, nums.length - 1, nums[i]); //交换 nums[i] 和 nums[j] 的值 swap(nums, i, j); } //将 nums[i + 1...nums.length - 1] 反转,即从降序变成升序 reverse(nums, i + 1, nums.length - 1); } //在 nums[left...right](降序) 中查找大于 target 的元素的最大下标 public int binarySearch(int[] nums, int left, int right, int target) { while (left target) { left = mid + 1; } else { right = mid - 1; } } return right; } //将 nums[i...j] 反转 public void reverse(int[] nums, int i, int j) { while (i