您的位置:首页 > 其它

[LintCode] Interleaving Positive and Negative Numbers

2015-09-09 09:42 369 查看
Given an array with positive and negative integers. Re-range it to interleaving with positive and negative integers.

Example

Given
[-1, -2, -3, 4, 5, 6]
, after re-range, it will be
[-1, 5, -2, 4, -3, 6]
or any other reasonable answer.

Note

You are not necessary to keep the original order of positive integers or negative integers.

Challenge

Do it in-place and without extra memory.

class Solution {
public:
/**
* @param A: An integer array.
* @return: void
*/
void rerange(vector<int> &A) {
int n = A.size();
if(n < 3) return;

int posNum = 0, negNum = 0, posIdx = 0, negIdx = 1;
for(size_t t = 0;t < n;++t){
if(A[t] >= 0) ++posNum;
else ++negNum;
}

if(negNum > posNum){
negIdx = 0;
posIdx = 1;
}

while(posIdx < n && negIdx < n){
while(posIdx < n && A[posIdx] >= 0) posIdx += 2;
while(negIdx < n && A[negIdx] < 0) negIdx += 2;
if(posIdx < n && negIdx < n) swap(A[posIdx],A[negIdx]);
}
}

};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: