每日一题(2022-01-29):按符号重排数组

每日一题(2022-01-29):按符号重排数组

来源:力扣
难度:中等
题目:2149. 按符号重排数组

题目详情

原题截图.png

题解思路

十分经典的双指针解法:

  • 指向正数的指针持续向后移动,直到遇到正数,并将此正数放入答案数组;
  • 指向负数的指针持续向后移动,直到遇到正数,并将此正数放入答案数组;

由于正数负数在原始数组中各占一半,所以只需要移动数组长度 / 2次。

代码结果

class Solution {
public:
    vector<int> rearrangeArray(vector<int>& nums) {
        vector<int> vecResult;
        int iIdxPos = 0, iIdxNeg = 0;
        for (int i = 0; i < nums.size() / 2; ++i)
        {
            while (nums[iIdxPos] < 0) ++iIdxPos;
            vecResult.push_back(nums[iIdxPos]);
            ++iIdxPos;
            while (nums[iIdxNeg] > 0) ++iIdxNeg;
            vecResult.push_back(nums[iIdxNeg]);
            ++iIdxNeg;
        }
        return vecResult;
    }
};

运行结果.png