题目描述
给出数字K,请输出所有结果小于K的整数组合到一起的最少交换次数。
组合一起是指满足条件的数字相邻,不要求相邻后在数组中的位置。
数据范围:
- -100 <= K <= 100
- -100 <= 数组中数值 <= 100
输入描述
第一行输入数组:1 3 1 4 0
第二行输入K数值:2
输出描述
第一行输出最少交换次数:1
用例1
输入
1 3 1 4 0
2
输出
1
说明
小于2的表达式是1 1 0, 共三种可能将所有符合要求数字组合一起,最少交换1次。
import java.util.Scanner;
import java.util.*;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int[] nums = Arrays.stream(in.nextLine().split(" ")).mapToInt(
Integer::parseInt).toArray();
int k = in.nextInt();
int length = 0;
int minChange = 0;
for (int num : nums) {
if (num < k) length++;
}
for (int i = 0; i < nums.length; i++) {
List<Integer> list = new ArrayList<Integer>();
for (int j = i; j < i + length && i + length <= nums.length; j++) {
list.add(nums[j]);
}
if (list.size() == 0)break;
int times = changeTimes(list, k);
if (minChange == 0) {
minChange = times;
} else if (times < minChange) {
minChange = times;
}
}
System.out.println(minChange);
}
public static int changeTimes(List<Integer> nums, int k) {
int changes = 0;
for (int i = 0; i < nums.size(); i++) {
if (nums.get(i) >= k) {
changes ++;
}
}
return changes;
}
}