编辑代码

// 设置标准输入接口
const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;

void (async function () {
  // 读取输入字符串
  const input = await readline();

  // 解析输入字符串,获取数组部分(去掉最后的逗号)
  const arr = JSON.parse(input.slice(0, input.lastIndexOf(",")));

  // 深拷贝函数的实现
  const deepCopy = (obj) => {
    // 如果不是对象或为null,直接返回
    if (obj == null || typeof obj !== "object") {
      return obj;
    }
    // 根据对象类型创建新的数组或对象
    const newObj = Array.isArray(obj) ? [] : {};
    // 递归复制所有属性
    for (const key in obj) {
      newObj[key] = deepCopy(obj[key]);
    }
    return newObj;
  };

  // 对数组进行深拷贝并排序
  const deepCopyArr = deepCopy(arr).sort((a, b) => a - b);

  // 获取输入字符串最后一个字符作为k值
  const k = Number(input[input.length - 1]);

  // 初始化结果变量
  let res = Infinity; // 存储最小差值
  let ans = 0; // 存储最终答案(起始索引)

  // 获取排序后数组的中位数作为目标值
  const target = deepCopyArr[Math.floor(arr.length / 2)];

  // 遍历所有可能的起始位置
  for (let i = 0; i + k <= arr.length; i++) {
    // 计算k个数的和(第一个数加上,后面k-1个数减去)
    let sum = arr[i];
    for (let j = i + 1; j < i + k; j++) {
      sum -= arr[j];
    }

    // 如果当前差值小于等于已知最小差值,更新结果
    if (Math.abs(sum - target) <= res) {
      res = Math.abs(sum - target);
      ans = i; // 记录当前起始位置
    }
  }

  // 输出结果(最优起始位置)
  console.log(ans);
})();