C++:
class Solution {
public:
bool canSortArray(vector<int>& nums) {
int i;
int prev_max = nums[0];
for (i = 1; i < nums.size() && countBitOnes(nums[i]) == countBitOnes(nums[i - 1]); i++) {
if (nums[i] > prev_max) {
prev_max = nums[i];
}
}
int cur_max;
int cur_min;
while (i < nums.size()) {
cur_min = cur_max = nums[i];
while (i + 1 < nums.size() && countBitOnes(nums[i]) == countBitOnes(nums[i + 1])) {
if (nums[i + 1] > cur_max) cur_max = nums[i + 1];
if (nums[i + 1] < cur_min) cur_min = nums[i + 1];
i++;
}
if (prev_max > cur_min) return false;
prev_max = cur_max;
i++;
}
return true;
}
int countBitOnes(int n) {
int count = 0;
while (n != 0) {
if (n & 1) count++;
n >>= 1;
}
return count;
}
};
, mình chỉ thấy trên mạng thôi chưa học - ko biết tác giả in person.
