LintCode 143. Sort Colors II

来源:互联网 发布:哪个电视直播软件最好 编辑:程序博客网 时间:2024/06/06 04:30

This is a very interesting question! I like it!

#include <iostream>#include <vector>#include <climits>using namespace std;/*  Given an array of n objects with K difference colors. sort them so that objects  of the same color are adjacent, with the colors in the order 1, 2, ... k  Note:    You are not suppose to use the library's sort function for this problem.  Exmaple:  Given colors = [3, 2, 2, 1, 4], k = 4, you code should sort colors in-place to  [1, 2, 2, 3, 4];*/void sortColorsII(vector<int>& colors, int k) {  int start = 0;  int end = colors.size() - 1;  int count = 0;  while(count < k) {    int currMin = INT_MAX;    int currMax = INT_MIN;    for(int i = start; i <= end; ++i) {      currMin = min(currMin, colors[i]);      currMax = max(currMax, colors[i]);    }    int left = start;    int right = end;    int curr = left;    while(curr <= right) {      if(colors[curr] == currMin) {        swap(colors[curr], colors[left]);        curr++;        left++;      } else if(colors[curr] > currMin && colors[curr] < currMax) {        curr++;      } else {        swap(colors[curr], colors[right]);        right--;      }    }    count += 2;    start = left;    end = right;  }}int main(void) {  vector<int> colors {3, 2, 2, 1, 4};  sortColorsII(colors, 4);  for(int i = 0; i < colors.size(); ++i) cout << colors[i] << endl;}


0 0
原创粉丝点击