关于#华为od机考#的问题,如何解决?

华为od机考 第一道题
输入k,输出所有结果小于k的整数组合到一起的最少交换次数。组合一起是指符合条件的数字相邻,不是在数组位置相邻。

img

不算难,但我有些不理解题目,导致第一个样例的情况,没能全部通过用例,只通过了47%。这个题目该怎么理解?

当时提交的代码:

import java.util.*;
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while(sc.hasNext()){
            String str = sc.nextLine();
            String[] arr = str.split(" ");
            int k = sc.nextInt();
            int x = 0;
            int d = 0;
            for(int i = 0; i < arr.length; i++){
                int n = Integer.parseInt(arr[i]);
                if(n < k){
                    x++;
                }
                if (n >= k) {
                    d++;
                }
            }
            if(x == arr.length || d == arr.length){
                System.out.println(0);
            }else if(x > 0){
                System.out.println(1);  //这个就乱写了
            }

        }
    }
}


我的思路是构建一个满足条件结果个数长度的队列,将数组通过这个队列遍历一遍,记录这个队列里不满足条件的最小个数,这就是最少需要交换的次数了,代码实现的话有很多可以优化的点,你可以自己试一试