简单模拟题。按照题目意思进行模拟即可。
class Solution {
public:
int countStudents(vector<int>& students, vector<int>& sandwiches)
{
int m = students.size();
int n = sandwiches.size();
vector<int> eated(m, 1);
int last = -1;
for (int i = 0; i < n; i++) {
bool findFlag = false;
for (int j = last + 1; j < m; j++) {
if (eated[j] == 0) {
continue;
}
if (students[j] == sandwiches[i]) {
eated[j] = 0;
last = j;
findFlag = true;
break;
}
}
if (findFlag == true) {
continue;
}
for (auto j = 0; j < last; ++j) {
if (eated[j] == 0) {
continue;
}
if (students[j] == sandwiches[i]) {
eated[j] = 0;
last = j;
findFlag = true;
break;
}
}
if (findFlag == true) {
continue;
}
break;
}
int ans = 0, len1 = eated.size();
for(int i = 0;i < len1; i++)
ans += eated[i];
return ans;
}
};
简单模拟题。重写排序规则即可。
class Solution {
public:
int get(int x){
int res = 0;
while (x) {
res += (x % 2);
x /= 2;
}
return res;
}
vector<int> sortByBits(vector<int>& arr) {
vector<int> bit(10001, 0);
for (auto x: arr) {
bit[x] = get(x);
}
sort(arr.begin(),arr.end(),[&](int x,int y){
if (bit[x] < bit[y]) {
return true;
}
if (bit[x] > bit[y]) {
return false;
}
return x < y;
});
return arr;
}
};
简单模拟题。求取出求和过程中的最小值即可,同时进行正数和非负数的区分。
class Solution {
public:
int minStartValue(vector<int>& nums) {
int ans = 1, sum = 0, len1 = nums.size();
for(int i = 0; i < len1; i++) {
sum += nums[i];
if(sum < ans)
ans = sum;
}
if(ans >= 1)
return 1;
else
return 1 - ans;
}
};
简单模拟题。按照题目意思模拟即可。
class Solution {
public:
int findTheDistanceValue(vector<int>& arr1, vector<int>& arr2, int d) {
int cnt = 0;
for (auto &x: arr1) {
bool ok = true;
for (auto &y: arr2) {
ok &= (abs(x - y) > d);
}
cnt += ok;
}
return cnt;
}
};
简单模拟题。排序两两相减即可。
class Solution {
public:
bool canMakeArithmeticProgression(vector<int>& arr) {
sort(arr.begin(), arr.end());
for (int i = 1; i < arr.size() - 1; ++i) {
if (arr[i] * 2 != arr[i - 1] + arr[i + 1]) {
return false;
}
}
return true;
}
};
简单模拟题。先排序,按照从单元容量从大到小的顺序,之后根据可以选择的数目,每次从大容量的数目减去,直到满足条件即可。
class Solution {
public:
int maximumUnits(vector<vector<int>>& b, int s) {
sort(b.begin(),b.end(),[](const auto& L, const auto& R){return L[1] > R[1];});
int ans = 0, n = 0;
for (int i = 0; i < b.size() && s > 0; i++) {
n = min(s, b[i][0]);
s -= n;
ans += n * b[i][1];
}
return ans;
}
};
简单模拟题。找规律实现即可。
class Solution {
public:
int totalMoney(int n) {
int res = 0;
for(int i = 1, money = 1; i <= n; i++){
res += money++;
if(i % 7 == 0)
money = i/7 + 1;
}
return res;
}
};
简单模拟题。按照题目意思模拟即可。
class Solution {
public:
vector<int> finalPrices(vector<int>& prices) {
for (int i = 0; i < prices.size(); ++i)
for (int j = i + 1; j < prices.size(); ++j)
if (prices[j] <= prices[i]) {
prices[i] = prices[i] - prices[j];
break;
}
return prices;
}
};
简单模拟题。按照题目意思模拟即可。
class Solution {
public:
vector<int> frequencySort(vector<int>& nums) {
unordered_map<int, int> cnt;
int len1 = nums.size();
for (int i = 0; i < len1; i++)
cnt[nums[i]] += 1;
sort(nums.begin(), nums.end(), [&cnt](int a, int b) {
return (cnt[a] == cnt[b]) ? a > b : cnt[a] < cnt[b];
});
return nums;
}
};
简单模拟题。按照题目意思模拟即可。
class Solution {
public:
double trimMean(vector<int>& arr) {
int n = arr.size();
int n5 = n*0.05;
sort(arr.begin(), arr.end());
double sum = 0;
for(int i = n5; i < n- n5; i++)
sum += arr[i];
return sum / (n-2*n5);
}
};