汝顾


私信TA

用户名:uq_22103583566

访问量:920

签 名:

等  级
排  名 15215
经  验 849
参赛次数 0
文章发表 1
年  龄 0
在职情况 学生
学  校
专  业

  自我简介:

#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
void CompactIntegers(vector<int>&res, int n) {
    int l = 0;//L初始化为0,因为刚开是数组的非零元素应该存储在0号位置
    int r = 0;//R初始化为0,因为数组要从0开始遍历
    while (r < n) {
        if (res[r] != 0) {
            swap(res[l], res[r]);//遇到非零元素,就交换当前l位置与r位置的元素,这样循环结束后非零元素都在零元素的前面
            l++;
        }    
            r++;
    }
}
int main() {
    int n;
    cin >> n;
    vector<int>res(n);
    for (int i = 0; i < n; i++) {
        cin >> res[i];
   }
    int count = 0;
    CompactIntegers(res, n);
    for (int i = 0; i < res.size(); i++) {
        if (res[i] != 0) {//输出非零元素并计数
            cout << res[i] << " ";
            count++;
        }
    }
    cout << endl;
    cout << count;
   
    return 0;
}

解题思路:这题采用双指针的解法来做,假设我们有指针L,R,L代表存目前数组非零元素应该存储的位置,我们用R遍历整个数组,如果遇到非零元素就arr[L]=arr[R],然后L++

,R++继续下一次遍历。

注意事项:

第一次写题解,有点激动emmmm


参考代码:

 

0.0分

2 人评分

  评论区

  • «
  • »