C++刷leetcode(1356. 根据数字二进制下 1 的数目排序)【位运算】
题目描述:给你一个整数数组 arr 。请你将数组中的元素按照其二进制表示中数字 1 的数目升序排序。
如果存在多个数字二进制中 1 的数目相同,则必须将它们按照数值大小升序排列。
请你返回排序后的数组。
示例 1:
输入:arr =
输出:
解释: 是唯一一个有 0 个 1 的数。
都有 1 个 1 。
有 2 个 1 。
有 3 个 1 。
按照 1 的个数排序得到的结果数组为
示例 2:
输入:arr =
输出:
解释:数组中所有整数二进制下都只有 1 个 1 ,所以你需要按照数值大小将它们排序。
示例 3:
输入:arr =
输出:
示例 4:
输入:arr =
输出:
示例 5:
输入:arr =
输出:
提示:
1 <= arr.length <= 500
0 <= arr <= 10^4
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/sort-integers-by-the-number-of-1-bits
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
int com(int input){
int res = 0;
while(input){
res += input&1;
input >>= 1;
}
return res;
}
bool cmp(int a, int b){
int num1 = com(a), num2 = com(b);
return num1 == num2 ? a < b : num1 < num2;
}
class Solution {
public:
vector<int> sortByBits(vector<int>& arr) {
sort(arr.begin(), arr.end(), cmp);
return arr;
}
};
注意事项:
1.sort中的cmp函数还是单独写比较好。 使用[&](int&a, int&b){return ;}溢出了,还没找到原因{:10_280:} 糖逗 发表于 2020-5-16 17:24
使用[&](int&a, int&b){return ;}溢出了,还没找到原因
没引用,没出错const static bool _=[](){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
return false;
}();
int BitCount(int n){
int result=0;
while(n){
result+=n&1;
n>>=1;
}
return result;
}
class Solution {
public:
vector<int> sortByBits(vector<int>& arr) {
sort(arr.begin(),arr.end(),[](int a,int b){
int c=BitCount(a),d=BitCount(b);
return c==d?a<b:c<d;
});
return arr;
}
}; 永恒的蓝色梦想 发表于 2020-5-16 17:45
没引用,没出错
这个写法我看懂了,但是我这个写法不知道为啥溢出了{:10_245:}
class Solution {
public:
int comput(int input){
int res = 0;
while(input){
res += input&1;
input >>= 1;
}
return res;
}
vector<int> sortByBits(vector<int>& arr) {
vector<int> res(arr);
vector<int> store;
for(int i = 0; i < arr.size(); i++){
store.push_back(comput(arr));
}
// for(auto cha : res)cout << cha << " ";
// cout << endl;
// for(auto cha : store) cout << cha << " ";
sort(res.begin(), res.end(), [&](int& a, int& b){return store == store? arr < arr : store < store;});
return res;
}
}; 本帖最后由 永恒的蓝色梦想 于 2020-5-16 19:03 编辑
糖逗 发表于 2020-5-16 18:47
这个写法我看懂了,但是我这个写法不知道为啥溢出了
我没记错的话,sort 给比较函数传进来的不是 index,而是值,所以我就不能理解你的 store store arr arr 了。 永恒的蓝色梦想 发表于 2020-5-16 19:00
我没记错的话,sort 给比较函数传进来的不是 index,而是值,所以我就不能理解你的了。
https://fishc.com.cn/thread-166741-1-1.html
我之前做另一个题的时候,看到了这种写法,当时觉得挺方便的{:10_297:} 永恒的蓝色梦想 发表于 2020-5-16 19:00
我没记错的话,sort 给比较函数传进来的不是 index,而是值,所以我就不能理解你的了。
还有这道题1337. 方阵中战斗力最弱的 K 行
我按照上一个帖子中的[&]这种写法还可以通过,真的迷惑{:10_284:}
class Solution {
public:
vector<int> kWeakestRows(vector<vector<int>>& mat, int k) {
vector<int> res;
vector<int> store;
for(int i = 0; i < mat.size(); i++){
int temp = 0;
store.push_back(i);
for(int j = 0; j < mat.size(); j++){
if(mat == 1) temp ++;
}
res.push_back(temp);
}
//for(auto cha : res) cout << cha << " ";
sort(store.begin(), store.end(), [&](int&a, int&b){return res != res ?res < res: a<b;});
vector<int> result (store.begin(), store.begin() + k);
return result;
}
}; 糖逗 发表于 2020-5-16 20:13
还有这道题1337. 方阵中战斗力最弱的 K 行
我按照上一个帖子中的[&]这种写法还可以通过,真的迷惑{:10 ...
玄学C++{:10_284:} 永恒的蓝色梦想 发表于 2020-5-16 20:15
玄学C++
I don‘t konw{:10_266:} 先不想了,也许过段时间能懂{:10_284:}
页:
[1]