题目
-
- 得到 0 的操作数
-
- 使数组变成交替数组的最少操作数
思路与算法
- 简单模拟即可,所谓辗转相除法
- 哈希处理,然后找到最大和次大值即可。
代码实现
-
- 得到 0 的操作数
class Solution {
public:
int countOperations(int num1, int num2) {
int count=0;
while(num1>0&&num2>0)
{
if(num1>=num2)
{
num1-=num2;
}
else
{
num2-=num1;
}
count++;
}
return count;
}
};
-
- 使数组变成交替数组的最少操作数
class Solution {
public:
int minimumOperations(vector<int>& nums) {
int first = nums[0];
int n = nums.size();
vector<int> odd(100001, 0);
vector<int> even(100001, 0);
for(int i=0;i<n;++i){
if(i&1){
odd[nums[i]]++;
} else{
even[nums[i]]++;
}
}
int odd_idx = max_element(odd.begin(), odd.end()) - odd.begin();
int even_idx = max_element(even.begin(), even.end()) - even.begin();
if(odd_idx != even_idx){
return n - odd[odd_idx] - even[even_idx];
} else{
int tmp_odd = odd[odd_idx];
int tmp_even = even[even_idx];
even[even_idx] = 0;
even_idx = max_element(even.begin(), even.end()) - even.begin();
odd[odd_idx] = 0;
odd_idx = max_element(odd.begin(), odd.end()) - odd.begin();
return n - max(even[even_idx]+tmp_odd, tmp_even+odd[odd_idx]);
}
return 0;
}
};
写在最后
- 状态略差,抓紧调整!
|