优质数对的数目[位运算特点+抽象能力考察+分组快速统计]

2023-11-09

位运算特点+抽象能力考察+分组快速统计

前言

位运算是计算机最基本的计算,是最快的运算方式,与或非各有特点;抽象能力考察我理解成一种 拿核心去累赘 的能力;分组快速统计,我们不必把眼光放在一个个数上,也许没有实际意义,而是针对所需,进行抽象分组。

一、优质数对的数目

在这里插入图片描述

二、思路与优化过程

package competition.single303;

import java.util.HashSet;
import java.util.Set;

public class CountExcellentPairs {
    /*
        前后数有什么关系?数字往后增长,
        与将都有1的地方算上,或都有1,0/1全算上。
        当两数或时,非重叠部分的1算上了,重叠部分的1只算了一半,但是与刚好不算非重叠的部分,且重叠的部分算了一半。
        那么两个数1的个数和,就是其与之后 + 或之后的1的个数。
     */
    public long countExcellentPairs(int[] nums, int k) {
        // 分组快速统计思想。
        // 我们不关心是那个数和那个数组成的优质对,我们只关心那个数有多少bit = 1,关心两者的bit = 1的个数之和是否大于k而已。
        // 可以去掉一些与题无关的累赘记录 & context,直面问题,可以降低时间复杂度,甚至是解题的关键。
        // idea:将bit = 1相同的数记录其有多少个,只要bit数等于某某及其它的个数,这才是核心信息,抓住命脉。
        int[] bit = new int[33];// 分组思想,将bit数抽象出来,而不关心其他累赘信息。
        Set<Integer> pool = new HashSet<>();// 去重。
        for (int num : nums) {
            if (!pool.contains(num)) bit[Integer.bitCount(num)]++;

            pool.add(num);
        }
        /*
        // 为什么我会写出这样的代码,找到思路了又能怎样,不清楚自己想要什么,不清楚与问题的联系点,照样写不出低复杂度的代码。
        int[] bit = new int[nums.length];
        for (int i = 0; i < nums.length; i++) bit[i] = Integer.bitCount(nums[i]);
        */
        long ans = 0;
        for (int i = 0; i < 33; i++) {
            for (int j = Math.max(0, k - i); j < 33; j++) {
                ans += bit[i] * bit[j];
            }
        }
        return ans;
        /*
        review
        多分析分析,找找已经操作/条件和问题的联系,在纸上多写写,找找规律,找找感觉。
         */
    }
}

总结

1)运行算各具特点,位运算相关的题,也在纸上多写写画画,找找感觉和规律。
2)平时多练,竞赛的时候没那么好的精力条件去分析太多和太深的东西,通过练习把自己的思考下限/脑活跃度下限提上来。
3)抽象能力可简单理解为拿核心去杂质。
4)像这种分组快速统计套路是第二次见了,大幅度降低时间复杂度,核心也是抓命脉,去无用信息,让有用信息不因与本题无关的无用信息牵绊其无法压缩。

参考文献

[1] LeetCode 优质数对的数目

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

优质数对的数目[位运算特点+抽象能力考察+分组快速统计] 的相关文章

随机推荐

  • TSI系统测量参数之:转速和零转速

    一 TSI系统测量参数 1 轴向位移 2 盖振或瓦振 3 偏心 4 键相 5 零转速 6 轴向振动 7 相对热膨胀 胀差 8 绝对热膨胀 缸胀 二 各参数作用 1 零转速与转速 1 零转速 主要用在汽机转速到零时投盘车的连锁以及对大机转速的
  • mac下的各种sed、grep、ag命令查看日志好用

    sed命令 删除文件的前100行 注意mac上要加个空字符串 sed i 1 100d 404 log 查看文件若干行 输出文件的5 8行 sed n 5 8p 1156 success txt 输出文件的5 8行至11 txt sed n
  • 动态DPC算法学习

    造成坏点的原因 感光元件芯片自身工艺技术瑕疵造成 光线采集存在缺陷 制造商产品差异 坏点分类 hot pixel 固定保持较高的像素值 一般呈现为画面高亮的点 dead pixel 固定保持较低的像素值 一般在画面中呈现为暗点 noise
  • 华为OD机试-磁盘容量排序

    题目描述 磁盘的容量单位常用的有M G T 他们之间的换算关系为 1T 1024G 1G 1024M 现在给定n块磁盘的容量 请对他们按从小到大的顺序进行稳定排序 例如给定5块盘的容量 5 1T 20M 3G 10G6T 3M12G9M 排
  • CSS基础学习——动画

    一 CSS3 2D变形 利用Transfrom方法 1 rotate angle 元素顺时针旋转给定的角度 允许负值 元素将逆时针旋转
  • Winner Winner【模拟、位运算】

    Winner Winner 题目链接 点击 题目描述 The FZU Code Carnival is a programming competetion hosted by the ACM ICPC Training Center of
  • python爬虫是干嘛的?python爬虫能做什么?

    Python爬虫是什么 Python爬虫是由Python程序开发的网络爬虫 webspider webrobot 是按照一定规则自动抓取万维网信息的程序或脚本 其实一般是通过程序在网页上获取你想要的数据 也就是自动抓取数据 爬虫又被称为网络
  • golang 详解协程——errgroup

    为什么要有sync errgroup go支持并发 一般采用的是 channel sync WaitGroup context 来实现各个协程之间的流程控制和消息传递 但是对于开启的成千上万的协程 如果在每个协程内都自行去打印 错误日志的话
  • 关于K-means的通俗理解

    机器学习通俗理解系列 关于knn的通俗理解 文章目录 前言 一 什么是K means 二 什么原理 三 重点 1 K值的选定 2 样本之间的距离 四 优缺点 五 优化进阶 总结 前言 刚学习机器学习的时候免不了百度 问什么是K means
  • vue3运行npm run serve报错ERROR Error: Cannot find module ‘babel-plugin-import‘ Require stack:

    1 完整报错 gt ims support demo 0 1 0 serve Users yizhikaixinya Desktop charmplus ims gt vue cli service serve ERROR Error Ca
  • 实验SparkSQL编程初级实践

    实验SparkSQL编程初级实践 实践环境 Oracle VM VirtualBox 6 1 12 Ubuntu 16 04 Hadoop3 1 3 JDK1 8 0 162 spark2 4 0 python3 5 Windows11系统
  • 领域建模

    忙碌的过着周末 一边思考如何建设自己知识体系 另外一遍白板的各种算法在脑袋互相争抢时间 低音炮单曲循环的的Ava Max Salt 心 静下来 环境燥起来 思绪继续飞行 前期读了一半的书 重新拿起 在建模方式上理解场景方法的研究 之前分享的
  • asp.net zero 8.2 学习-3-添加实体,并迁移到数据库

    系列目录 asp net zero 8 2 学习 1 安装 asp net zero 8 2 学习 2 创建一个页面 asp net zero 8 2 学习 3 添加实体 并迁移到数据库 asp net zero 8 2 学习 4 创建接口
  • 压缩伪影的探讨

    1 压缩伪影的由来 常用的视频编码器中 在一个框架中使用了多种编码方法 01 预测编码 不编码预测值 而是编码预测值与实际值的差值 02 变换编码 对信号的样本值进行某种形式的函数变换 从一种空间变换到另一种空间 然后再根据信号在另一个空间
  • SOA中国路线图活动感受

    下午参加了SOA中国路线图活动 主要由普元公司和相关的媒体以及电信客户进行演讲 对于SOA我之前一直认为是个很虚的东西 概念大于实践 但听了普元公司黄柳青博士的介绍以及在电信领域中的应用 感觉还是有收获的 很多思想可以应用到系统的设计和开发
  • 数据结构——红黑树

    1 什么是红黑树 红黑树是一种特定类型的二叉树 用于组织数据 它是一种平衡二叉查找树 AVL树 的变体 每个结点都带有颜色属性 红色或黑色 在红黑树中 从根到叶子的最长的可能路径不多于最短的可能路径的两倍长 具体来说 红黑树满足以下性质 每
  • 结构型模式-享元模式

    package per mjn pattern flyweight 抽象享元角色 public abstract class AbstractBox 获取图形的方法 内部状态 public abstract String getShape
  • 机器学习 可视化_机器学习-可视化

    机器学习 可视化 机器学习导论 Introduction to machine learning In the traditional hard coded approach we program a computer to perform
  • 【Unity 几何着色器】简单的网格线描边

    水文 几何着色器 第一个pass就默认的unlit效果 第二个pass是新建的 属性都没有用到 先留个坑吧 Shader GeoHelp LineMesh Properties MainTex Texture 2D white EdgeWi
  • 优质数对的数目[位运算特点+抽象能力考察+分组快速统计]

    位运算特点 抽象能力考察 分组快速统计 前言 一 优质数对的数目 二 思路与优化过程 总结 参考文献 前言 位运算是计算机最基本的计算 是最快的运算方式 与或非各有特点 抽象能力考察我理解成一种 拿核心去累赘 的能力 分组快速统计 我们不必