You need to enable JavaScript to run this app. 滑动拼图逆序数奇偶性调整:如何将奇数逆序数的数组转为偶数
优惠活动
大模型
产品
解决方案
定价
更多

滑动拼图逆序数奇偶性调整:如何将奇数逆序数的数组转为偶数

逆序数奇偶性调整实现方法

逆序数定义

逆序数:对于拼图面板,逆序数指任意两个块i、j满足i<j,但按行优先顺序(先第0行,再第1行,依此类推)遍历面板时i出现在j之后的配对。
示例图

现有基础信息

给定待处理数组:
arr = [1, 20, 6, 4, 22 , 5 , 12 , 3];
提供的逆序数统计函数:

function getInvCount(arr){
    let inv_count = 0;
    for(let i=0; i<arr.length-1; i++){
        for(let j=i+1; j<arr.length; j++){
            if(arr[i] > arr[j]) inv_count++;
        }
    }
    return inv_count;
}

实现逻辑

交换任意两个相邻元素时,仅会改变这两个元素的相对顺序,其余所有元素对的相对顺序不受影响,因此逆序数的奇偶性会直接翻转。基于这个特性可以快速调整:

  • 调用getInvCount计算当前数组的逆序数
  • 若逆序数为偶数,无需调整直接返回原数组
  • 若逆序数为奇数,交换数组最后两个相邻元素,即可将逆序数奇偶性翻转为偶数

代码实现

function adjustInvParity(arr) {
    // 拷贝数组避免修改原数据
    const targetArr = [...arr];
    const currentInv = getInvCount(targetArr);
    // 逆序数为奇数时调整
    if (currentInv % 2 !== 0) {
        // 交换最后两个相邻元素
        [targetArr[targetArr.length - 1], targetArr[targetArr.length - 2]] = [targetArr[targetArr.length - 2], targetArr[targetArr.length - 1]];
    }
    return targetArr;
}

效果验证

针对给定的数组计算可得逆序数为14,属于偶数,无需调整即可直接使用。如果数组逆序数为奇数,执行上述调整后逆序数奇偶性会变为偶数,不影响拼图的可解性判断逻辑。

内容的提问来源于stack exchange,提问作者Rey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.14 03:33:03