news 2026/6/14 2:05:40

Leetcode刷题日记20(191-200)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Leetcode刷题日记20(191-200)

目录

  • 问题1:
    • 问题链接:
    • 问题描述:
    • 实例:
    • 代码:
  • 问题2:
    • 问题链接:
    • 问题描述:
    • 实例:
    • 代码:
  • 问题3:
    • 问题链接:
    • 问题描述:
    • 实例:
    • 代码:
  • 问题4:
    • 问题链接:
    • 问题描述:
    • 实例:
    • 代码:

问题1:

问题链接:

191. 位1的个数

问题描述:

给定一个正整数 n,编写一个函数,获取一个正整数的二进制形式并返回其二进制表达式中 设置位 的个数(也被称为汉明重量)。

实例:

示例1: 输入:n=11输出:3解释:输入的二进制串1011中,共有3个设置位。 示例2: 输入:n=128输出:1解释:输入的二进制串10000000中,共有1个设置位。 示例3: 输入:n=2147483645输出:30解释:输入的二进制串1111111111111111111111111111101中,共有30个设置位。

代码:

classSolution:defhammingWeight(self,n:int)->int:res=0whilen:#与操作,只要是1,就是1res+=n&1n>>=1returnres
#n &= n - 1 : 消去数字 n 最右边的 1 。classSolution:defhammingWeight(self,n:int)->int:res=0whilen:res+=1n&=n-1returnres

问题2:

问题链接:

198. 打家劫舍

问题描述:

你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。 给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。

实例:

示例1: 输入:[1,2,3,1]输出:4解释:偷窃1号房屋(金额=1),然后偷窃3号房屋(金额=3)。 偷窃到的最高金额=1+3=4。 示例2: 输入:[2,7,9,3,1]输出:12解释:偷窃1号房屋(金额=2),偷窃3号房屋(金额=9),接着偷窃5号房屋(金额=1)。 偷窃到的最高金额=2+9+1=12

代码:

#时间复杂度:O(n),其中 n 是 nums 的长度。#空间复杂度:O(n)。classSolution:defrob(self,nums:List[int])->int:# dfs(i) 表示从 nums[0] 到 nums[i] 最多能偷多少@cache# 缓存装饰器,避免重复计算 dfs 的结果defdfs(i:int)->int:ifi<0:# 递归边界(没有房子)return0returnmax(dfs(i-1),dfs(i-2)+nums[i])returndfs(len(nums)-1)# 从最后一个房子开始思考
直接翻译的话,dfs(i)翻译成 f[i]。 但记忆化搜索会访问dfs(2)dfs(1),f[2]和 f[1]下标越界了。 解决办法:在 f 数组的前面插入两个0,把 f 数组整体往右偏移2位。偏移后,dfs(i)翻译成 f[i+2]
#1:1翻译成堆#时间复杂度:O(n)。其中 n 是 nums 的长度。#空间复杂度:O(n)。classSolution:defrob(self,nums:List[int])->int:f=[0]*(len(nums)+2)fori,xinenumerate(nums):f[i+2]=max(f[i+1],f[i]+x)returnf[-1]
#空间优化#时间复杂度:O(n)。其中 n 是 nums 的长度。#空间复杂度:O(1)。classSolution:defrob(self,nums:List[int])->int:f0=f1=0forxinnums:f0,f1=f1,max(f1,f0+x)returnf1

问题3:

问题链接:

199. 二叉树的右视图

问题描述:

给定一个二叉树的 根节点 root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。

实例:


代码:

先递归右子树,再递归左子树,当某个深度首次到达时,对应的节点就在右视图中。

时间复杂度:O(n),其中 n 是二叉树的节点个数。 空间复杂度:O(h),其中 h 是二叉树的高度。递归需要O(h)的栈空间。最坏情况下,二叉树退化成一条链,递归需要O(n)的栈空间。
# Definition for a binary tree node.# class TreeNode:# def __init__(self, val=0, left=None, right=None):# self.val = val# self.left = left# self.right = rightclassSolution:defrightSideView(self,root:Optional[TreeNode])->List[int]:#递归,先递归右子树,再递归左子树,当某个深度首次到达时,对应的节点就在右视图中。ans=[]defdfs(node:Optional[TreeNode],depth:int)->None:ifnodeisNone:returnifdepth==len(ans):#这个深度首次遇到ans.append(node.val)dfs(node.right,depth+1)#先递归右子树,保证首次遇到的一定是最右边的节点dfs(node.left,depth+1)dfs(root,0)returnans

问题4:

问题链接:

200. 岛屿数量

问题描述:

给你一个由'1'(陆地)和'0'(水)组成的的二维网格,请你计算网格中岛屿的数量。 岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。 此外,你可以假设该网格的四条边均被水包围。

实例:

示例1: 输入:grid=[['1','1','1','1','0'],['1','1','0','1','0'],['1','1','0','0','0'],['0','0','0','0','0']]输出:1示例2: 输入:grid=[['1','1','0','0','0'],['1','1','0','0','0'],['0','0','1','0','0'],['0','0','0','1','1']]输出:3

代码:

时间复杂度:O(mn),其中 m 和 n 分别是 grid 的行数和列数。由于 DFS 中修改了 grid[i][j]='2',当我们访问一个访问过的格子时,会触发ifgrid[i][j]!='1':return。只有首次访问一个格子时,才会继续递归,其余情况不会继续递归。每次插上一个旗子只需要O(1)的时间,插上至多 mn 个旗子,就需要O(mn)的时间。 空间复杂度:O(mn)。最坏情况下,对于蛇形陆地、蚊香型陆地等,递归需要O(mn)的栈空间。
classSolution:defnumIslands(self,grid:List[List[str]])->int:m,n=len(grid),len(grid[0])defdfs(i:int,j:int)->None:#出界,或者不是1,就不再往下递归ifi<0ori>=morj<0orj>=norgrid[i][j]!="1":returngrid[i][j]="2"dfs(i,j-1)#往左走dfs(i,j+1)#往右走dfs(i-1,j)#往上走dfs(i+1,j)#往下走ans=0fori,rowinenumerate(grid):forj,cinenumerate(row):ifc=="1":dfs(i,j)ans+=1returnans
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 14:41:14

云计算:重新定义资源效率,解锁企业增长新引擎

在数字化竞争日益激烈的今天&#xff0c;企业资源管理正面临前所未有的挑战&#xff1a;如何用更少的成本支撑更复杂的业务&#xff1f;如何让IT资源像“活水”一样随需而动&#xff1f;云计算的崛起&#xff0c;为这一问题提供了颠覆性答案——通过弹性、智能、全局优化的资源…

作者头像 李华
网站建设 2026/6/10 13:22:17

TDengine 在金融领域的应用

行情中心系统架构设计 某大型证券公司的行情中心采用 TDengine TSDB 构建了一套完整的行情数据处理系统&#xff0c;该架构主要由以下几个核心模块组成。 1. 数据采集层 从交易所接收实时行情数据&#xff0c;包括股票、期货、期权等多种金融产品支持多种数据源接入&#xf…

作者头像 李华
网站建设 2026/6/10 13:36:25

技术收藏 | 一文读懂Agentic RAG:大模型检索增强生成的新范式

Agentic RAG将智能体的自主规划能力与传统RAG技术结合&#xff0c;使其能处理更复杂的查询任务。与传统RAG相比&#xff0c;Agentic RAG具有多数据源融合、外部工具协作、自我反思评估等优势&#xff0c;可通过单Agent或多Agent架构实现。这种技术极大增强了RAG检索的全面性、灵…

作者头像 李华
网站建设 2026/6/13 6:51:31

【护理学专业论文写作模版】基于中西医结合与多学科协作的上消化道出血护理模式:消化性溃疡患者全程管理策略研究

内容概要&#xff1a;本文系统梳理了消化性溃疡上消化道出血的护理研究现状&#xff0c;涵盖疾病定义、分类、临床表现及危害&#xff0c;并详细阐述了包括护理评估、病情观察、饮食护理、用药护理在内的常规护理措施。文章重点综述了中医护理、多学科联合护理、全程优质护理、…

作者头像 李华
网站建设 2026/6/9 22:02:01

JavaScript —— JavaScript 数据处理和转换工具函数详解

JavaScript 数据处理和转换工具函数详解 在前端开发过程中,我们经常需要对数据进行各种处理和转换操作,比如对象操作、树形结构转换等。本文将介绍几种常用的数据处理和转换工具函数,提高开发效率。 技术难点 如何高效地同步两个对象的键值对 如何在保持引用关系的前提下进…

作者头像 李华