classSolution { public: vector<int> partitionLabels(string s){ int array[26]; int len = s.size(); vector<int> result; for (int i = 0; i < len; ++i) array[static_cast<int>(s[i] - 'a')] = i; int start = 0, end = 0; int size = 0; for (int i = 0; i < len; ++i) { size = max(size, array[static_cast<int>(s[i] - 'a')]); end = size; if (i == end) { result.emplace_back(end - start + 1); start = end + 1; } } return result; } };
classSolution { public: voidsortColors(vector<int>& nums){ int len = nums.size(); int cur = 0; for (int i = 0; i < len; ++i) { if (nums[i] == 0) { swap(nums[i], nums[cur]); ++cur; } } for (int i = 0; i < len; ++i) { if (nums[i] == 1) { swap(nums[i], nums[cur]); ++cur; } } } };
classSolution { public: voidsortColors(vector<int>& nums){ int len = nums.size(); int cur0 = 0, cur2 = len - 1; for (int i = 0; i <= cur2; ++i) { while (i <= cur2 && nums[i] == 2) { swap(nums[i], nums[cur2]); --cur2; } if (nums[i] == 0) { swap(nums[i], nums[cur0]); ++cur0; } } } };
4. 直接遍历
该题最简单的方式是将数组遍历得到每个元素的数量然后修改原来的数组即可
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
classSolution { public: voidsortColors(vector<int>& nums){ int red = 0, white = 0, blue = 0; int len = nums.size(); for (int i = 0; i < len; ++i) { if (nums[i] == 0) ++red; if (nums[i] == 1) ++white; if (nums[i] == 2) ++blue; } for (int i = 0; i < len; ++i) { if (i < red) nums[i] = 0; if (i >= red&& i < red + white) nums[i] = 1; if (i >= red + white && i < red + white + blue) nums[i] = 2; } } };