-----> C思路没错,下标写错了,recheck is necessary
A 简单题
class Solution {
public:
/**
* 位移后二进制串的十进制值
* @param str string字符串 二进制字符串
* @param k int整型 循环位移次数
* @return long长整型
*/
long long rotateRight(string str, int k) {
// write code here
long long ret = 0;
for(int i = str.length() - k; i < str.length(); ++i) {
ret = ret * 2 + (str[i] - '0');
}
for(int i = 0; i < str.length() - k; ++i) {
ret = ret * 2 + (str[i] - '0');
}
return ret;
}
};
B 简单思维,用SET收敛非奇即可
class Solution {
public:
/**
* 返回一个数,代表让这些数都变成奇数的最少的操作次数
* @param n int整型 代表一共有多少数
* @param a int整型vector 代表n个数字的值
* @return int整型
*/
int solve(int n, vector<int>& a) {
// write code here
set <int> ST;
for(auto x : a) {
if(x % 2 == 0) {
ST.insert(x);
}
}
int ret = 0;
while(!ST.empty()) {
auto x = --ST.end();
++ret;
if ( (*x) >> 1 & 1) {
ST.erase(x);
continue;
} else {
ST.erase(x);
ST.insert((*x) >> 1);
}
}
return ret;
}
};
C 简单构造,排反序后交叉排列即可
class Solution {
public:
/**
* 返回按照这些花排成一个圆的序列中最小的“丑陋度”
* @param n int整型 花的数量
* @param array int整型vector 花的高度数组
* @return int整型
*/
int solve(int n, vector<int>& arr) {
// write code here
sort(arr.rbegin(), arr.rend());
deque<int> dq;
for(int i = 0; i < arr.size(); ++i) {
if(i & 1) {
dq.push_back(arr[i]);
} else {
dq.push_front(arr[i]);
}
}
int ans = 0;
for(int i = 1; i < n; ++i) {
ans = max(ans, std::abs(dq[i] - dq[i - 1]));
}
ans = max(ans, std::abs(dq[0] - dq[n - 1]));
return ans;
}
};