LCR-003比特位计数

一.题目:

. - 力扣(LeetCode)

二.我的原始解法-一次性通过的python内置bin函数解法:

思路和题目描述一致,就是把0-n的每个数字转为二进制,计算这个二进制中1的个数添加到返回数组中,掌握基础函数即可。

class Solution:

    def countBits(self, n: int) -> List[int]:

        # bin解法

        #技巧1:python中十进制转二进制是bin(x),返回0b开头的二进制字符串

        #技巧2:python中计算字符串中某个子串的个数函数为s.count(substring),返回Int值

        result = []

        for x in range(0,n+1):

            result.append(bin(x).count('1'))

        return result

三.其他人的正确及好的解法,力扣解法参考:

这道题除了上面的bin()函数解法,还有一种动态规划解法+二进制数中1个数规律。

(1)动态规划理论基础可以看B站:

从此再也不怕动态规划了,动态规划解题方法论大曝光 !| 理论基础 |力扣刷题总结| 动态规划入门_哔哩哔哩_bilibili、10分钟彻底搞懂“动态规划”算法_哔哩哔哩_bilibili

(2)python的位运算符基础(位运算符其实就是二进制运算符号,区别于常用的十进制的加减乘除等符号)讲解:https://zhuanlan.zhihu.com/p/370167569、python 位运算之右移,左移,以及在数值的整数次计算中的应用_整数右移一位-CSDN博客

(3)二进制奇数偶数规律:Leetcode之动态规划(DP)专题-338. 比特位计数(Counting Bits) - 秦羽纶 - 博客园

(4)力扣上动态规划+位运算+二进制奇偶数易懂解法:

. - 力扣(LeetCode)

四.对于别人解法的消化及总结:

    从0到n(n是一个非负整数,即0或正整数)的一个序列,如n为5时,这个序列为[0,1,2,3,4,5],这个序列是十进制的序列,要探究这个序列中每个十进制数的对应的二进制中1的个数,就先将这个序列转换为二进制序列,为[0,01,10,11,100,101],可以发现这当然也是一个递增的二进制序列,那么题目就转化为要探究这个二进制序列的1的个数规律。

    这个二进制序列中1的个数的规律要分为奇数和偶数两个情况看(二进制的奇数也是十进制的奇数,二进制的偶数也是十进制的偶数),因为最低位2的0次方等于1。可以发现奇数的1的个数等于上一个偶数+1,偶数的1的个数等于这个偶数整除2的二进制数的1的个数,如这个二进制序列的1的个数为[0,1,1,2,1,2],L[0]=0,L[1]=1=L[0]+1,L[2]=L[2//2]=L[1]=1,L[3]=L[2]+1=3,L[4]=L[4//2]=L[2]=1,L[5]=L[4]+1=2。可以看到这个序列都是通过L[0]的1的个数和奇偶性计算出来的,那么就可以在代码中判断二进制的奇偶性,也就是对应n的奇偶性,也就是下标的奇偶性进行递归运算即可。由于这里计算的连续性,每个结果都是通过前面结果组合得到的,就可以通过动态规划保存前面结果的状态来减少递归次数,最终用动态规划来解决。动态规划需要确定dp数组,这里dp数组就是返回的结果数组,即[0,1,1,2,1,2],初始条件就是L[0]的值,下标代表的是n,也代表n的奇偶性(二进制及十进制的)。

    总结一下:从十进制序列[0,1,2,3,4,5]到二进制序列[0,01,10,11,100,101]到二进制的1的个数序列[0,1,1,2,1,2],发现这个序列的变化规律为L[0]=0,L[1]=1=L[0]+1,L[2]=L[2//2]=L[1]=1,L[3]=L[2]+1=3,L[4]=L[4//2]=L[2]=1,L[5]=L[4]+1=2,发现这是一个动态规划问题,确认dp数组为这个序列,确认初始依赖值为L[0]=0。另外其实根据位运算原理就知道十进制偶数整除2就相当于每一位右移,而右移是不改变这个十进制数对应的二进制数的1的个数的,这个是二进制偶数1的变化规律的原理。所以由初始偶数知道初始奇数,就可以根据奇偶变化计算后面的各个数的1的个数了。

本题编程技巧:

(1)python中十进制转二进制是bin(x),返回0b开头的二进制字符串

(2)python中计算字符串中某个子串的个数函数为s.count(substring),返回Int值

(3)python中的位运算就是二进制运算符,主要有左移/右移/按位与/按位或/按位异或/按位取反等,用这些运算符算出来的都是对应的二进制数,具体运算符参考上面【三】中链接,这些二进制运算符其实可以等价于相应的十进制运算符,如左移<<,每左移一位得到的二进制数,如果转换成十进制数,就等于原二级制数对应的十进制数乘以2,也就是二进制左移一位=十进制*2;右移>>,每右移一位得到的二进制数,如果转换成十进制数,就等于原二进制对应的十进制数整除2,也就是二进制右移一位=十进制//2。所以可以利用这种对应关系,处理十进制的乘除等,也可以方便二进制转十进制。

(4)十进制数转换为二进制数,奇偶性不变

(5)二进制奇数等于前一个偶数在最低位+1,二进制偶数相当于这个偶数所在非负整数序列的下标//2的偶数右移一位,且右移不改变这个二进制数的1的个数

(6)递归解法要看下是否能用动态规划解决

bin解法通过截图:

动态规划+二进制1个数规律解法通过截图:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/61941.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

动态求连续区间和(线段树 树状数组)

向上更新&#xff0c;建树&#xff0c;求区间和&#xff0c;修改节点值 向上更新&#xff1a; 返回左右节点值的和 建树&#xff1a; 如果是叶子节点&#xff0c;赋值结构体的左区间&#xff0c;右区间&#xff0c;值 如果不是叶子节点&#xff0c;那么先求中点&#xff0c…

聊聊Flink:这次把Flink的window分类(滚动、滑动、会话、全局)、窗口函数讲透

一、窗口 窗口&#xff08;Window&#xff09;是处理无界流的关键所在。窗口将流分成有限大小的“桶”&#xff0c;我们可以在其上应用算子计算。Flink可以使用window()和windowAll()定义一个窗口&#xff0c;二者都需要传入一个窗口分配器WindowAssigner&#xff0c;WindowAs…

友思特新闻 | 友思特荣获广州科技创新创业大赛智能装备行业赛初创组优胜企业!

2024年11月19日&#xff0c;第十三届中国创新创业大赛&#xff08;广东广州赛区&#xff09;暨2024年广州科技创新创业大赛智能装备行业赛颁奖典礼隆重举行。 赛事奖项介绍&#xff1a;广州科技创新创业大赛智能装备行业赛 第十三届“中国创新创业大赛&#xff08;广东广州赛区…

2024强网拟态决赛-eBeepf

漏洞分析与利用 分析后面看情况吧&#xff0c;有时间再写吧&#xff0c;先贴个利用脚本&#xff1a; #ifndef _GNU_SOURCE #define _GNU_SOURCE #endif#include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <fcntl.h> #include <…

Kotlin Multiplatform 未来将采用基于 JetBrains Fleet 定制的独立 IDE

近期 Jetbrains 可以说是动作不断&#xff0c;我们刚介绍了 IntelliJ IDEA 2024.3 K2 模式发布了稳定版支持 &#xff0c;而在官方最近刚调整过的 Kotlin Multiplatform Roadmap 优先关键事项里&#xff0c;可以看到其中就包含了「独立的 Kotlin Multiplatform IDE&#xff0c;…

38_转置卷积

转置卷积也被称为&#xff08;Transposed Convolution&#xff09;&#xff0c;也被称为fractionally_strided convolution、deconvolution。 转置卷积不是卷积的逆运算。 转置卷积也是卷积 转置卷积的作用是上采样。 1. 基础概念 转置卷积&#xff08;Transposed Convolution…

【Linux】内核的编译和加载

Linux内核是操作系统的核心&#xff0c;负责管理系统的硬件资源&#xff0c;并为用户空间的应用程序提供必要的服务。内核的编译和加载是操作系统开发和维护的重要环节。本文将详细介绍Linux内核的编译过程以及如何加载内核到系统中。 1. 引言 Linux内核的编译是一个复杂的过…

Qt桌面应用开发 第七天(绘图事件 绘图设备)

目录 1.绘图事件paintEvent 2.高级绘图 3.图片绘制 4.绘图设备 4.1QPixmap 4.2QBitmap 4.3QImage 4.4QPicture 1.绘图事件paintEvent paintEvent——绘图事件 需求&#xff1a;利用QPainter绘制点、线、圆、矩形、文字&#xff1b;设置画笔改为红色&#xff0c;宽度为…

使用IDEA构建springboot项目+整合Mybatis

目录 目录 1.Springboot简介 2.SpringBoot的工作流程 3.SpringBoot框架的搭建和配置 4.用Springboot实现一个基本的select操作 5.SpringBoot项目部署非常简单&#xff0c;springBoot内嵌了 Tomcat、Jetty、Undertow 三种容器&#xff0c;其默认嵌入的容器是 Tomcat&#xff0c;…

【含开题报告+文档+PPT+源码】基于SSM的电影数据挖掘与分析可视化系统设计与实现

开题报告 随着互联网的普及和数字娱乐产业的蓬勃发展&#xff0c;电影作为一种重要的娱乐方式&#xff0c;已经深入人们的日常生活。然而&#xff0c;面对海量的电影资源&#xff0c;用户在选择观影内容时常常感到困惑和无所适从。传统的电影推荐方式&#xff0c;如人工筛选、…

C++使用minio-cpp(minio官方C++ SDK)与minio服务器交互简介

目录 minio简介minio-cpp简介minio-cpp使用 minio简介 minio是一个开源的高性能对象存储解决方案&#xff0c;完全兼容Amazon S3 API&#xff0c;支持分布式存储&#xff0c;适用于大规模数据架构&#xff0c;容易集成&#xff0c;而且可以方便的部署在集群中。 如果你已经部…

【君正T31开发记录】8.了解rtsp协议及设计模式

前边搞定了驱动&#xff0c;先不着急直接上手撸应用层的代码&#xff0c;先了解一下大致要用到的东西。 设计PC端先用vlc rtsp暂时H264编码&#xff08;vlc好像不支持h265,这个后边我试试&#xff09;的视频流&#xff0c;先需要支持上rtsp server&#xff0c;了解rtsp协议是必…

JavaScript中的this指向绑定规则(超全)

JavaScript中的this指向绑定规则&#xff08;超全&#xff09; 1.1 为什么需要this? 为什么需要this? 在常见的编程语言中&#xff0c;几乎都有this这个关键字&#xff08;Objective-C中使用的是self),但是在JavaScript中的this和常见的面向对象语言中的this不太一样 常见面…

Spring注入Map学习

Spring注入Map学习 在Spring中 在策略模式中, 会经常用到 根据Bean名称获取Bean的实例 有2个方法很好用 1. 使用Autowired注入 2. 使用构造方法注入 但是奇怪的一点是: 日志打印并没有看到结果, 第一行的 Autowired的结果 是个null 那是因为 注入时机 的问题 注入时机&…

Redis五大基本类型——Set集合命令详解(命令用法详解+思维导图详解)

目录 一、Set集合类型介绍 二、常见命令 1、SADD 2、SMEMBERS 3、SISMEMBER 4、SCARD 5、SRANDMEMBER 6、SPOP 7、SMOVE 8、SREM ​编辑 9、集合间操作 &#xff08;1&#xff09;SINTER &#xff08;2&#xff09;SINTERSTORE &#xff08;3&#xff09;SUNION…

sql 查询语句:将终端数据形式转换成insert语句

文本转换&#xff1a;sql 查询语句&#xff1a;将终端数据形式转换成insert语句 如上&#xff0c;写过后端的都知道&#xff0c;从生产或其他地方拿到的数据&#xff0c;有可能会是图一&#xff1b;但实际上&#xff0c;我们需要图二的数据&#xff1b; 不废话&#xff0c;直接…

C++数据结构与算法

C数据结构与算法 1.顺序表代码模版 C顺序表模版 #include <iostream> using namespace std; // 可以根据需要灵活变更类型 #define EleType intstruct SeqList {EleType* elements;int size;int capacity; };// Init a SeqList void InitList(SeqList* list, int capa…

【AIGC】大模型面试高频考点-RAG篇

【AIGC】大模型面试高频考点-RAG篇 &#xff08;1&#xff09;RAG的基本原理&#xff08;2&#xff09;RAG有哪些评估方法&#xff1f;&#xff08;3&#xff09;RAG有哪些评估框架&#xff1f;&#xff08;4&#xff09;RAG各模块有哪些优化策略&#xff1f; &#xff08;1&am…

标准操作规程(SOP)制定方法+模板指南

在企业的成功之路上&#xff0c;拥有制定、传播以及管理流程文档与详细步骤指南的能力至关重要。众多组织都将标准操作规程&#xff08;SOP&#xff09;作为指导其工作流程操作的核心文档形式。 但SOP的作用远不止于操作指南&#xff1b;它们更像是高性能车辆中的精密GPS系统。…

硬件工程师零基础入门:一.电子设计安全要点与欧姆定律

硬件工程师零基础入门:一.电子设计安全要点与欧姆定律 第一节 电子设计安全要点第二节 欧姆定律 第一节 电子设计安全要点 电路小白最好先买直流稳压电源&#xff08;将高压转成低压直流电&#xff09;使用&#xff0c;尽量不要使用市电。 1.尽量不要捏住电源两端。 正确做法&a…