Interleaving Positive and Negative Numbers
Example
Solution
class Solution:
"""
@param A: An integer array.
@return nothing
"""
def rerange(self, A):
posNum, negNum = 0, 0 #统计正数负数各有多少
for x in A:
if x > 0:
posNum += 1
else:
negNum += 1
posInd, negInd = 1, 0
if posNum > negNum: # 正数多则正数从索引0开始包含负数
posInd = 0
negInd = 1
while posInd < len(A) and negInd < len(A): #从同一侧开始做双指针推进。
while negInd < len(A) and A[negInd] <= 0:
negInd += 2
while posInd < len(A) and A[posInd] > 0:
posInd += 2
if posInd < len(A) and negInd < len(A):
A[posInd], A[negInd] = A[negInd], A[posInd]
posInd += 2
negInd += 2
return ALast updated