当前位置: 首页 > news >正文

【Python3】【力扣题】338. 比特位计数

【力扣题】题目描述:

题解:从0到n的整数,逐一统计二进制中1的个数,记录在一个新列表中。

【Python3】代码:

1、解题思路:Python函数。

知识点:bin(...):转为二进制字符串,即"0bxxx"。

              字符串.count(...):统计字符串中某字符出现的次数。

              列表.append(...):往列表尾部添加元素。

              列表推导式:用简洁的方式创建列表。即 [ 对元素的简单操作 for 变量 in 可迭代对象 ]

class Solution:def countBits(self, n: int) -> List[int]:res = [bin(i)[2:].count("1") for i in range(n+1)]return res#相当于res = []for i in range(n+1):res.append(bin(i)[2:].count("1"))return res

2、解题思路:Brian Kernighan算法。

每次将整数的二进制最低位的1消除为0,直到整数变为0。消除多少次则二进制中有多少个1。

num &= (num-1) 即 num = num & (num-1) 。

相当于将二进制最低位的1消除为0。若num为2的整数幂,则num&(num-1)=0。

例如:num=5(二进制101),num-1=4(二进制100),num&(num-1)=101&100=100(即将101的最低位的1消除为0)。

class Solution:def countBits(self, n: int) -> List[int]:res = []for i in range(n+1):cou = 0while i > 0:i &= (i-1)cou += 1res.append(cou)return res# 或者def count_one(num):cou = 0while num > 0:num &= (num-1)cou += 1return cou  res = [count_one(i) for i in range(n+1)]return res

3、解题思路:动态规划。

将一个问题拆分成多个子问题,解决子问题并记录子问题的结果减少重复计算,最终整个问题解决。

(3-1)若num是2的整数幂,num中只有最高位有1,则记录num。

若num不是2的整数幂,则num的二进制 比 去除最高位之后的二进制 多一个1。

例如:5(二进制101),去除最高位之后的二进制01(其个数已统计过为1),则5的二进制中1的个数为1+1=2个。

class Solution:def countBits(self, n: int) -> List[int]:# 动态规划--最高有效位res = [0]high = 0                    # 记录最高有效位即二进制中只有最高位有一个1for i in range(1,n+1):if i & (i-1) == 0:high = ires.append(res[i-high] + 1)return res

(3-2)将二进制右移一位,去除最低位之后的二进制中1的个数已统计过;被去除的最低位若为1则结果中再加1。

例如:5(二进制101),右移一位之后的二进制10(其个数已统计过为1),被去除的最低位为1则5的二进制中1的个数为1+1=2个。

知识点:num >> 1:将num二进制右移一位。

              i & 1:将num与1进行二进制与运算。

class Solution:def countBits(self, n: int) -> List[int]:# 动态规划-最低有效位res = [0]for i in range(1,n+1):res.append(res[i >> 1] + (i & 1))return res

(3-3)num&(num-1)消除num最低位的1,则num 比 消除最低位1之后 多一个1。

例如:num=5(二进制101),num-1=4(二进制100),num&(num-1)=101&100=100,二进制100其个数已统计过为1,则5的二进制中1的个数为1+1=2个。

class Solution:def countBits(self, n: int) -> List[int]:# 动态规划--最低设置位res = [0]for i in range(1,n+1):res.append(res[i & (i-1)] + 1)return res

相关文章:

【Python3】【力扣题】338. 比特位计数

【力扣题】题目描述: 题解:从0到n的整数,逐一统计二进制中1的个数,记录在一个新列表中。 【Python3】代码: 1、解题思路:Python函数。 知识点:bin(...):转为二进制字符串&#xff…...

Lubuntu 23.10用户可使用LXQt 1.4桌面

导读在众多 Lubuntu 用户的要求下,Lubuntu 开发人员决定将 LXQt 1.4 桌面环境向后移植到最新的 Lubuntu 23.10 (Mantic Minotaur) 版本。 是的,您没看错,您现在可以使用官方的 Lubuntu Backports PPA(个人软…...

语音识别入门——常用软件及python运用

工具以及使用到的库 ffmpegsoxaudacitypydubscipylibrosapyAudioAnalysisplotly 本文分为两个部分: P1:如何使用ffmpeg和sox处理音频文件 P2:如何编程处理音频文件并执行基本处理 P1 处理语音数据——命令行方式 格式转换 ffmpeg -i video…...

maven 将Jar包安装到本地仓库

window系统: 注意事项:在windows中,使用mvn指令将jar安装到本地仓库时,一定要将相关资源使用“"”包裹上,不然会报下面的错: mvn install:install-file "-DfileD:\BaiduNetdiskDownload\qianzixi…...

Django ORM查询之聚合函数、聚合查询(aggregate)、分组查询(annotate)

django 版本 3.2 python 3.6.8 一、聚合函数 常见的五个聚合函数: Avg (Average) : 平均值Max (Maximum) : 最大值Min (Minimum) : 最小值Sum (Summary) : 求和Count : 个数 导入语句: from django.db.models import Avg, Max, Min, Sum, Count, Q, …...

构建个性化预约服务:预约上门服务系统源码解读与实战

随着社会的发展,预约上门服务系统在满足用户需求、提升服务效率方面发挥着越来越重要的作用。在本文中,我们将深入研究预约上门服务系统的源码,通过实际的技术代码示例,揭示系统内部的关键机制,以及如何在实际项目中应…...

『RabbitMQ』入门指南(安装,配置,应用)

前言 RabbitMQ 是在 AMQP(Advanced Message Queuing Protocol) 协议标准基础上完整的,可复用的企业消息系统。它遵循 Mozilla Public License 开源协议,采用 Erlang 实现的工业级的消息队列(MQ)服务器,建立在 Erlang …...

2311skia,01渲染架构

一,渲染层级 从渲染流程上分,Skia可分为如下三个层级: 1,指令层:SkPicture,SkDeferredCanvas->SkCanvas 这一层决定要绘图的操作,绘图操作的预变换矩阵,当前裁剪区域,在哪些层上绘图,层的生成与合并. 2,解析层:SkBitmapDevice->SkDraw->SkScan,SkDraw1Glyph::Proc 这…...

天线的负载

在电磁学和通信工程领域,天线的负载(Load)通常指连接到天线的部分或元件,该部分在电学上对天线的输入产生影响。天线的负载可以是被连接到天线的阻抗元件、电感、电容、电阻或其他电性元件。 具体而言,天线的负载是指…...

Java学习路径:入门学习、深入学习、核心技术,操作案例和实际代码示例

学习路径:入门学习、深入学习、核心技术, 每个主题都包括很多的操作案例和实际代码示例。 a. 入门学习: 1. 基础语法: 变量和数据类型: // 定义和初始化变量 int age 25;// 不同数据类型的声明 double price 19.99…...

Python武器库开发-前端篇之CSS元素(三十二)

前端篇之CSS元素(三十二) CSS 元素是一个网页中的 HTML 元素,包括标签、类和 ID。它们可以通过 CSS 选择器选中并设置样式属性,以使网页呈现具有吸引力和良好的可读性。常见的 HTML 元素包括 div、p、h1、h2、span 等,它们可以使用 CSS 设置…...

作为Java初学者,如何快速学好Java?

作为Java初学者,如何快速学好Java? 开始的一些话 对于初学者来说,编程的学习曲线可能相对陡峭。这是正常现象,不要感到沮丧。逐步学习,循序渐进。 编程是一门实践性的技能,多写代码是提高的唯一途径。尽量…...

LuatOS-SOC接口文档(air780E)--pwm - PWM模块

pwm.open(channel, period, pulse, pnum, precision) 开启指定的PWM通道 参数 传入值类型 解释 int PWM通道 int 频率, 1-1000000hz int 占空比 0-分频精度 int 输出周期 0为持续输出, 1为单次输出, 其他为指定脉冲数输出 int 分频精度, 100/256/1000, 默认为100,…...

基于51单片机的人体追踪可控的电风扇系统

**单片机设计介绍, 基于51单片机超声波测距汽车避障系统 文章目录 一 概要概述硬件组成工作原理优势应用场景总结 二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 # 基于51单片机的人体追踪可控的电风扇系统介绍 概述 该系统是基于51…...

使用数据集对SegFormer模型进行微调以改进自动驾驶车辆的车道检测-附源码下载

SegFormer:细分严重影响了高级驾驶辅助系统的开发。它在自动驾驶汽车技术的快速发展中发挥了关键作用。它由多个复杂的组件组成。对于任何在道路上行驶的车辆来说,车道检测至关重要。车道是道路上的标记,有助于区分道路上的可行驶区域和不可行驶区域。当前一代有多种车道检测…...

【微服务专题】SpringBoot自动配置简单源码解析

目录 前言阅读对象阅读导航前置知识什么是自动配置0.1 基本概念0.2 SpringBoot中的【约定大于配置】0.3 从SpringMVC看【约定大于配置】0.4 从Redis看【约定大于配置】0.5 小结 笔记正文一、EnableAutoConfiguration源码解析二、SpringBoot常用条件注解源码解析2.1 自定义条件注…...

分布式数据恢复-hbase+hive分布式存储误删除如何恢复数据?

hbasehive分布式存储数据恢复环境: 16台某品牌R730XD服务器节点,每台物理服务器节点上有数台虚拟机,虚拟机上配置的分布式,上层部署hbase数据库hive数据仓库。 hbasehive分布式存储故障&初检: 数据库文件被误删除…...

安卓系统修图软件(一)

平时我们会不时在朋友圈发自己的自拍照,或者是风景图等,许多小伙伴们此时会对照片进行一定的修理,比如添加滤镜等操作。在电脑上用ps修图比较繁琐,日常中大可不必用这把宰牛刀;而手机自带的编辑器,或者是QQ…...

截图转HTML代码,支持预览,前端不用浪费时间写html和css了

截图转代码 试用地址:https://picoapps.xyz/free-tools/screenshot-to-code 这个简单的应用可以将截图转换为HTML/Tailwind CSS代码。它使用GPT-4 Vision来生成代码,并使用DALL-E 3来生成类似的图像。现在你也可以输入一个URL来克隆一个现有的网站&#…...

Vite CSS Module 优雅的处理样式隔离

今天介绍的是我写的一个vite插件vite-plugin-oneof-css-module,该插件主要处理scss module,那它适用于什么场景呢? 1. 最大的特点就是使用scss module 可以不用写 .module.scss 了 2. 可以根据不同的文件夹或文件分别进行不同的处理&#x…...

【AGI时代招聘生存指南】:错过2026奇点大会这4个信号,你的技术团队将在6个月内掉队2个代际

第一章:2026奇点智能技术大会:AGI与人才招聘 2026奇点智能技术大会(https://ml-summit.org) AGI招聘范式的结构性转变 传统技术岗位JD正被AGI原生能力模型重构。企业不再仅评估编程语言熟练度,而是聚焦于候选人在多模态推理、自主目标分解、…...

Vue v-on 在 React 中 VuReact 会如何实现?

VuReact 是一个能将 Vue 3 代码编译为标准、可维护 React 代码的工具。今天就带大家直击核心:Vue 中常见的 v-on/ 指令经过 VuReact 编译后会变成什么样的 React 代码? 前置约定 为避免示例代码冗余导致理解偏差,先明确两个小约定&#xff…...

SpringBoot配置安全实战:从明文到ENC加密的进阶之路

1. 为什么你的SpringBoot配置正在"裸奔"? 记得去年我接手一个微服务项目时,发现所有数据库密码、Redis密钥都直接写在application.yml里,就像把家门钥匙挂在门把手上。更可怕的是,这些配置文件还被提交到了GitHub公开仓…...

Explorer.exe进程占用100%导致Win10黑屏?深度解析注册表启动项与系统优化软件的冲突

Windows 10黑屏故障深度解析:从Explorer进程崩溃到系统启动项修复 上周帮朋友处理一台突然黑屏的Win10笔记本时,发现任务管理器里explorer.exe进程CPU占用率长期100%,重启后直接进入黑屏状态。这种看似简单的故障背后,其实是Wind…...

第 498 场周赛Q1~Q3

Q1Q2 题目链接: 101046. 最小稳定下标 I(简单) 101047. 最小稳定下标 II(中等) 算法原理: 解法:前缀和-前后缀分解 Ⅰ中1ms击败100.00% Ⅱ中8ms击败51.69% 时间复杂度O(N) 思路很简单&#x…...

基恩士DL-EP1与欧姆龙PLC的EIP通信实战:从IP配置到数据读取

1. 硬件连接与基础环境搭建 第一次接触基恩士DL-EP1和欧姆龙PLC通信时,我花了大半天时间才搞明白硬件连接的门道。DL-EP1这个传感器网关就像个翻译官,负责把基恩士传感器的"方言"转换成EtherNet/IP这种PLC能听懂的"普通话"。实际操作…...

告别生产混乱与库存积压:详解精益十大工具的管控功能,掌握精益十大工具在制造业场景的应用

在生产制造领域,告别生产混乱与库存积压是每个管理者的核心诉求,而实现这一目标的关键在于系统性地应用精益十大工具。精益十大工具并非孤立的方法,而是一套能深度优化制造业场景的管控功能体系。通过掌握精益十大工具的具体应用,…...

OpenClaw 为什么突然火了?开源个人 AI Assistant 到底在做什么

🤵‍♂️ 个人主页:小李同学_LSH的主页 ✍🏻 作者简介:LLM学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞&#x1f4…...

别再只会用OpenCV的resize了!手把手教你用NumPy实现图像缩放(Nearest/Bilinear/Bicubic/Lanczos对比)

从零实现图像缩放:四种插值算法的NumPy实战指南 当你第一次调用cv2.resize()时,是否好奇过这个黑盒子内部究竟发生了什么?图像缩放远不止是简单的像素复制或删除,背后隐藏着数学与艺术的完美结合。本文将带你用NumPy亲手实现四种…...

终极指南:如何免费永久冻结IDM试用期并彻底告别激活弹窗

终极指南:如何免费永久冻结IDM试用期并彻底告别激活弹窗 【免费下载链接】IDM-Activation-Script IDM Activation & Trail Reset Script 项目地址: https://gitcode.com/gh_mirrors/id/IDM-Activation-Script Internet Download Manager(IDM&…...