当前位置:   article > 正文

leetcode 2917.找出数组中的K-or值

leetcode 2917.找出数组中的K-or值

说实话这道题就是阅读题。虽然作者本题写的并不怎么简单,但是思路还是很清楚的。

思路:通过题目我们就可以知道,本质上就是算出这个数的二进制,然后在二进制中找到各位有多少1的题目而已。

  1. int n=nums.size();
  2. int arr[51][32];
  3. for(int i=0;i<51;i++){
  4. for(int j=0;j<32;j++)
  5. {
  6. arr[i][j]=0;
  7. }
  8. }
  9. int x=0;
  10. int q=0;
  11. for(int i=0;i<n;i++){
  12. int num=nums[i];
  13. x=0;
  14. while(num){
  15. arr[i][x++]=num%2;
  16. num/=2;
  17. }
  18. }

这一段主要就是对于二进制数的求法,适合新手观看。

这样我们求出来二进制之后,然后再次进行双重循环遍历,我们在遍历的时候,定义的二维数组含义就是第一维的下标用来表示这个数在nums中的位置,第二维空间里自然就是用来存储二进制数了。我们必须要列优先遍历,这样才能纵向和nums这几个数的第0位,第一位等等这样比较下去,别忘了计数,看看这些数里第i位有多少1.

然后就和k进行比较,如果>=k,那么我们直接储存这里的坐标i,否则继续循环。

最后退出循环整个结束之后,我们就按照题目所给的方式求解最终的数就行了。

  1. class Solution {
  2. public:
  3. int findKOr(vector<int>& nums, int k) {
  4. int n=nums.size();
  5. int arr[51][32];
  6. for(int i=0;i<51;i++){
  7. for(int j=0;j<32;j++)
  8. {
  9. arr[i][j]=0;
  10. }
  11. }
  12. int x=0;
  13. int q=0;
  14. for(int i=0;i<n;i++){
  15. int num=nums[i];
  16. x=0;
  17. while(num){
  18. arr[i][x++]=num%2;
  19. num/=2;
  20. }
  21. }
  22. int count=0;
  23. vector<int>res;
  24. for(int i=0;i<32;i++){
  25. count=0;
  26. for(int j=0;j<n;j++){
  27. if(arr[j][i]==1)
  28. count++;
  29. }
  30. if(count>=k)
  31. res.push_back(i);
  32. }
  33. int sum=0;
  34. for(int i=0;i<res.size();i++)
  35. sum+=pow(2,res[i]);
  36. return sum;
  37. }
  38. };

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/206238
推荐阅读
相关标签
  

闽ICP备14008679号