【传送门】:https://leetcode-cn.com/problems/count-elements-with-strictly-smaller-and-greater-elements/
签到题,排序后遍历一下就可以了
solution:
class Solution { public: int countElements(vector<int>& nums) { sort(nums.begin(),nums.end()); int n=nums.size(); int ans=0; for(int i=1;i<n;i++) { if(nums[i]>nums[0]&&nums[i]<nums[n-1]) {ans++;} } return ans; } };
【传送门】:https://leetcode-cn.com/problems/find-all-lonely-numbers-in-the-array/
签到题,进行排序后遍历就可以了
solution:
ps:写的有点丑,但是为了a题,也就是无所谓啦
class Solution { public: vector<int> findLonely(vector<int>& nums) { int n=nums.size(); vector<int> ans; if(n==1) { ans.push_back(nums[0]); return ans; } sort(nums.begin(),nums.end()); for(int i=0;i<n;i++) { if(i==0) { if(nums[i]!=nums[i+1]&&nums[i]+1!=nums[i+1]&&nums[i]-1!=nums[i+1]) ans.push_back(nums[i]); } else if(i==n-1) { if(nums[i]!=nums[i-1]&&nums[i]+1!=nums[i-1]&&nums[i]-1!=nums[i-1]) ans.push_back(nums[i]); } else { if(nums[i]!=nums[i+1]&&nums[i]+1!=nums[i+1]&&nums[i]-1!=nums[i+1]&&nums[i]!=nums[i-1]&&nums[i]+1!=nums[i-1]&&nums[i]-1!=nums[i-1]) ans.push_back(nums[i]); } } return ans; } };
【传送门】:https://leetcode-cn.com/problems/rearrange-array-elements-by-sign/
签到题,无语了,直接遍历,存一下就好了。
solution:
class Solution { public: vector<int> rearrangeArray(vector<int>& nums) { int n=nums.size(); vector<int> da(n/2); vector<int> xiao(n/2); int cnt1=0,cnt2=0; for(int i=0;i<n;i++) { if(nums[i]>0) {da[cnt1++]=nums[i];} else {xiao[cnt2++]=nums[i];} } cnt1=0,cnt2=0; int count=1; for(int i=0;i<n;i++) { nums[i]=count%2==0?xiao[cnt2++]:da[cnt1++]; count++; } return nums; } };
【传送门】:https://leetcode-cn.com/problems/maximum-good-people-based-on-statements/
题目出到了知识盲点,考察状态压缩与二进制枚举,观察题目数据范围并不大,所以可以直接采用暴力搜索即可
solution:
class Solution { public: int maximumGood(vector<vector<int>>& s) { int n = s.size(); int mask = (1 << n); int ans = 0; for (int i = 0; i < mask; i++) { // 考虑 0 到 2^n - 1 种情况中的值 bool flag = true; for (int j = 0; j < n; j++) { // 对于每一个值考虑每一位具体是 0 还是 1 if ((i >> j) & 1) { // 如果 i 的第 j 位等于 1, 就说明这种 mask 中的这一位存在 // j 是好人的情况下,根据 statesment[j][k] 计算其他人是好人还是坏人 for (int k = 0; k < s[j].size(); k++) { if (s[j][k] == 2) continue; if ((s[j][k] == 1 && ((i >> k) & 1) == 0) || (s[j][k] == 0 && ((i >> k) & 1) == 1)) { // 如果出现了陈述的状态和当前 mask 表示的状态不同的情况 flag = false; break; // 就可以快进到下一种情况 } } } } if (flag) { // 如果存在一种 mask 正确的遍历完成的话 ans = max(ans, __builtin_popcount(i)); //——builtin_popcount(i)----->找到并输出i的二进制1的个数 } } return ans; } };