企业营销型网站类型,龙华网站开发,学习做网站,小程序制作需要多少钱一个题目描述#xff1a;
给你一个下标从 0 开始、长度为 n 的整数排列 nums 。
如果排列的第一个数字等于 1 且最后一个数字等于 n #xff0c;则称其为 半有序排列 。你可以执行多次下述操作#xff0c;直到将 nums 变成一个 半有序排列 #xff1a;
选择 nums 中相邻的两…题目描述
给你一个下标从 0 开始、长度为 n 的整数排列 nums 。
如果排列的第一个数字等于 1 且最后一个数字等于 n 则称其为 半有序排列 。你可以执行多次下述操作直到将 nums 变成一个 半有序排列
选择 nums 中相邻的两个元素然后交换它们。
返回使 nums 变成 半有序排列 所需的最小操作次数。
排列 是一个长度为 n 的整数序列其中包含从 1 到 n 的每个数字恰好一次。
示例 1
输入nums [2,1,4,3]
输出2
解释可以依次执行下述操作得到半有序排列
1 - 交换下标 0 和下标 1 对应元素。排列变为 [1,2,4,3] 。
2 - 交换下标 2 和下标 3 对应元素。排列变为 [1,2,3,4] 。
可以证明要让 nums 成为半有序排列不存在执行操作少于 2 次的方案。
示例 2
输入nums [2,4,1,3]
输出3
解释
可以依次执行下述操作得到半有序排列
1 - 交换下标 1 和下标 2 对应元素。排列变为 [2,1,4,3] 。
2 - 交换下标 0 和下标 1 对应元素。排列变为 [1,2,4,3] 。
3 - 交换下标 2 和下标 3 对应元素。排列变为 [1,2,3,4] 。
可以证明要让 nums 成为半有序排列不存在执行操作少于 3 次的方案。示例 3
输入nums [1,3,4,2,5]
输出0
解释这个排列已经是一个半有序排列无需执行任何操作。
题解
class Solution {public int semiOrderedPermutation(int[] nums) {int n nums.length;int a 0, b 0;for (int i 0; i n; i) {if (nums[i] 1) {a i;}if (nums[i] n) {b i;}}return a n - 1 - b - (a b ? 1 : 0);}
}