码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 2354. 优质数对的数目-排序去重,加统计


    2354. 优质数对的数目-排序去重,加统计

    给你一个下标从 0 开始的正整数数组 nums 和一个正整数 k 。

    如果满足下述条件,则数对 (num1, num2) 是 优质数对 :

    num1 和 num2 都 在数组 nums 中存在。
    num1 OR num2 和 num1 AND num2 的二进制表示中值为 1 的位数之和大于等于 k ,其中 OR 是按位 或 操作,而 AND 是按位 与 操作。
    
    • 1
    • 2

    返回 不同 优质数对的数目。

    如果 a != c 或者 b != d ,则认为 (a, b) 和 (c, d) 是不同的两个数对。例如,(1, 2) 和 (2, 1) 不同。

    注意:如果 num1 在数组中至少出现 一次 ,则满足 num1 == num2 的数对 (num1, num2) 也可以是优质数对。

    示例 1:

    输入:nums = [1,2,3,1], k = 3
    输出:5
    解释:有如下几个优质数对:

    • (3, 3):(3 AND 3) 和 (3 OR 3) 的二进制表示都等于 (11) 。值为 1 的位数和等于 2 + 2 = 4 ,大于等于 k = 3 。
    • (2, 3) 和 (3, 2): (2 AND 3) 的二进制表示等于 (10) ,(2 OR 3) 的二进制表示等于 (11) 。值为 1 的位数和等于 1 + 2 = 3 。
    • (1, 3) 和 (3, 1): (1 AND 3) 的二进制表示等于 (01) ,(1 OR 3) 的二进制表示等于 (11) 。值为 1 的位数和等于 1 + 2 = 3 。
      所以优质数对的数目是 5 。

    示例 2:

    输入:nums = [5,1,1], k = 10
    输出:0
    解释:该数组中不存在优质数对。

    这题很难啊,个人建议可以学习一下,思路就是,我们肯定是要去重的,所以做一个排序,然后去重,之后,我们统计每个数二进制1的个数,解题代码如下:

    int cmp(const void* a, const void* b) {
    
        return *(int*)a - *(int*)b;
    
    }
    
    long long countExcellentPairs(int* nums, int numsSize, int k){
        long long re=0;
        int r[32];
    
        int newsize = 0;
        qsort(nums, numsSize, sizeof(int), cmp);    //排序原数组
    
        for (int i = 1; i < numsSize; i++) {
    
            if (nums[i] != nums[newsize]) nums[++newsize] = nums[i];
    
        }//去重原数组
    
        ++newsize;  
    
        
       // printf("newsize %d ",newsize);
        numsSize=newsize;
    
    
        for(int i=0;i<32;i++){
            r[i]=0;
        }
         for(int i=0;i<numsSize;i++){
             int count=0;
             int t=nums[i];
             while(t){
                 if(t&1){
                     count++;
                 }
                 t=t>>1;
             }
             r[count]++;
          
        }
        //  for(int i=0;i<32;i++){
        //     printf("%d ",r[i]);
        // }
        for(int i=0;i<32;i++){
            if(r[i]!=0){
                for(int j=i;j<32;j++){
                    if(r[j]!=0){
                        if(i+j>=k&&i==j){
                            re=re+(r[j])*(r[j]-1)+r[j];
    
    
                        }
                        else if(i+j>=k){
                            re=re+r[i]*r[j]*2;
                        }
                    }
                }
            }
        }
        return re;
    
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
  • 相关阅读:
    测试面经 | 从测试螺丝钉到大厂测试开发,三点成长心得和面试经验
    循序渐进介绍基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发(5) -- 树列表TreeView的使用
    VSRS4.0 安装与配置
    java计算机毕业设计个人阅读习惯个性化推荐系统研究源码+mysql数据库+系统+lw文档+部署
    Linux安装Anaconda教程
    到底什么是拓扑空间,拓扑
    科兴未来|第六届中国·南宁海(境)外人才创新创业大赛
    Java - 根据文件绝对路径,来删除文件
    【2022最新核心面试资料 】最强Java面试八股文秋招offer召唤术!入职薪资53k
    Mysql判断字段是否为NULL
  • 原文地址:https://blog.csdn.net/weixin_43327597/article/details/133319813
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号