You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将数组重排为正负交替形式?求解决长度不匹配问题的方案

正负数字交替重排的Q语言实现

问题分析

你原函数的核心问题在于:

  • 未单独处理0元素,将其误归为正数范畴,导致计数偏差
  • 当正负元素数量不等时,拼接逻辑的长度计算错误,引发匹配问题

解决方案函数

// 正负交替重排,剩余元素追加末尾,0放在最后
rearrangeSigns:{
    // 分离正、负、零元素(正数不含0)
    negatives: x where signum[x] = -1;
    positives: x where signum[x] = 1;
    zeros: x where signum[x] = 0;
    // 取正负元素的最小数量,确定交替轮数
    minCount: min[count[negatives]; count[positives]];
    // 交替拼接前minCount组正负元素
    alternated: raze flip (negatives[0:minCount]; positives[0:minCount]);
    // 追加剩余的正负元素和所有零元素
    alternated, negatives[minCount:], positives[minCount:], zeros
}

测试验证

测试你的示例列表:

q)list:1 2 3 -4 -1 4
q)rearrangeSigns[list]
-4 1 -1 2 3 4  // 和预期一致

测试包含0且正负数量不等的list2:

q)list2:-5 -2 5 2 4 7 1 8 0 -8
q)rearrangeSigns[list2]
-5 5 -2 2 -8 4 7 1 8 0  // 正负交替后,剩余正数追加,最后是0

逻辑说明

  1. 元素分离:明确将列表拆分为负、正、零三类,避免0干扰正负计数
  2. 交替拼接:以数量较少的那类元素为基准,两两交替拼接,保证不会出现长度不匹配
  3. 剩余处理:将未参与交替的剩余正负元素直接追加,最后加上所有0元素,符合常规排序逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 14:12:11