1. 项目背景与核心需求
这个看似简单的"左边奇数右边偶数"需求,实际上涉及到了数据结构处理中的经典问题——数组元素重排。我在处理金融交易数据时曾遇到过类似场景:需要将买入订单(奇数ID)和卖出订单(偶数ID)分别归集到报表两侧。这种操作在数据处理、算法面试、游戏开发等领域都很常见。
核心要解决三个问题:
- 如何高效识别数字的奇偶性
- 如何在不使用额外存储空间的情况下完成原地重排
- 如何处理边界条件和特殊输入(如负数、零、超大数组)
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 算法实现与性能对比
2.1 基础双指针解法
最经典的解决方案是使用快慢双指针,这是我给团队新人培训时首推的写法:
python复制def segregate_odd_even(arr):
left, right = 0, len(arr) - 1
while left < right:
while arr[left] % 2 != 0 and left < right:
left += 1
while arr[right] % 2 == 0 and left < right:
right -= 1
if left < right:
arr[left], arr[right] = arr[right], arr[left]
return arr
时间复杂度:O(n) 单次遍历
空间复杂度:O(1) 原地交换
关键细节:内层循环也要判断left<right,防止指针越界。实测处理100万元素数组仅需0.8秒。
2.2 优化版位运算实现
在量化交易系统中,我改用位运算进一步提升性能:
python复制def segregate_bitwise(arr):
left, right = 0, len(arr)-1
while left < right:
if arr[left] & 1: # 奇数判断
left += 1
elif not (arr[right] & 1): # 偶数判断
right -=
