2-Color Dutch National Flag Problem

问题

a[0..n-1]中包含红元素或蓝元素;重新放置使得 红元素均在蓝元素之前。

循环不变式

每一次循环,a[0...k-1]是红色

实例代码

#include <iostream>
#include <vector>

using namespace std;

class Solution {
public:
    //将仅包含1,2组成的数组用循环不变式的方式将数组转换成2在前面,1在后面。
    void loop_variant(vector<int>& vec) {
        int k = 0;
        int m = 0;
        while(m < vec.size()) {
            if (vec[m] == 2) {
                int tmp;
                tmp = vec[k];
                vec[k] = vec[m];
                vec[m] = tmp;
                k++; //每一次循环k以前的都是2
            }
            m++;
        }
    }
};


int main() {
    int arr[] = {1, 2, 1, 1, 1, 2, 2, 2, 1, 1};
    vector<int> vec(arr, arr+10);
    Solution* solution = new Solution();
    solution->loop_variant(vec);
    for (int i = 0; i < vec.size(); i++)
        cout << vec[i] << " ";
    cout << endl;

    return 0;
}

相关文章:

  • 2021-06-12
  • 2021-11-05
  • 2021-09-11
  • 2021-08-25
  • 2022-12-23
  • 2022-12-23
  • 2021-05-19
  • 2021-05-29
猜你喜欢
  • 2022-12-23
  • 2022-02-03
  • 2021-07-21
  • 2021-08-03
  • 2022-01-12
  • 2021-11-06
  • 2021-12-21
相关资源
相似解决方案