# 1053. Previous Permutation With One Swap ###### tags: `Leetcode` `Medium` `FaceBook` `Permutation` Link: https://leetcode.com/problems/previous-permutation-with-one-swap/ ## 思路 和[0031. Next Permutation](https://hackmd.io/TsbCCO9UTJK23dz4ewwVbQ)有点像,但又不完全一样 通过观察可以发现,这题要找从右往左第一个升序的也就是arr[i]>arr[i+1],然后把arr[i]和后面的数字里最大的但小于arr[i]的数字和arr[i]交换 ## Code ```java= class Solution { public int[] prevPermOpt1(int[] arr) { int largerIdx = -1; for(int i = arr.length-2;i >= 0;i--){ if(arr[i+1] < arr[i]){ largerIdx = i; break; } } if(largerIdx == -1) return arr; int swapIdx = largerIdx+1; for(int i = largerIdx+1;i < arr.length;i++){ if(arr[i]<arr[largerIdx] && arr[i]>arr[swapIdx]){ swapIdx = i; } } swap(arr, largerIdx, swapIdx); return arr; } public void swap(int[] arr, int a, int b){ int temp = arr[a]; arr[a] = arr[b]; arr[b] = temp; } } ```
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up