力扣热门算法题 204.计数质数,207.课程表,213.打家劫舍II

力扣热门算法题 204.计数质数,207.课程表,213.打家劫舍II,每题做详细思路梳理,配套Python&Java双语代码, 2025.07.07 可通过leetcode所有测试用例。

目录

204.计数质数

解题思路

完整代码

207.课程表

解题思路

完整代码

213.打家劫舍II

解题思路

完整代码


204.计数质数

给定整数 n ,返回 所有小于非负整数 n 的质数的数量 。

示例 1:

输入:n = 10
输出:4
解释:小于 10 的质数一共有 4 个, 它们是 2, 3, 5, 7 。

示例 2:

输入:n = 0
输出:0

示例 3:

输入:n = 1
输出:0

提示:

  • 0 <= n <= 5 * 10^6

解题思路

对于每一个质数 p,从 p*p 开始,把所有 p 的倍数标记为非质数。

  • 创建一个长度为 n 的布尔数组 isPrime,全部初始化为 True

  • 01 设为 False,它们不是质数;

  • 2 开始,如果 isPrime[i] 为真,则它是质数;

    • 将从 i*in-1 范围内所有 i 的倍数设为 False

  • 最后统计 True 的个数,就是质数的个数。

完整代码

python

class Solution:def countPrimes(self, n: int) -> int:if n < 2:return 0is_prime = [True] * nis_prime[0:2] = [False, False]for i in range(2, int(n ** 0.5) + 1):if is_prime[i]:for j in range(i * i, n, i):is_prime[j] = Falsereturn sum(is_prime)

java

class Solution {public int countPrimes(int n) {if (n < 2) return 0;boolean[] isPrime = new boolean[n];Arrays.fill(isPrime, true);isPrime[0] = false;isPrime[1] = false;for (int i = 2; i * i < n; i++) {if (isPrime[i]) {for (int j = i * i; j < n; j += i) {isPrime[j] = false;}}}int count = 0;for (boolean prime : isPrime) {if (prime) count++;}return count;}
}

207.课程表

你这个学期必须选修 numCourses 门课程,记为 0 到 numCourses - 1 。

在选修某些课程之前需要一些先修课程。 先修课程按数组 prerequisites 给出,其中 prerequisites[i] = [ai, bi] ,表示如果要学习课程 ai 则 必须 先学习课程  bi 。

  • 例如,先修课程对 [0, 1] 表示:想要学习课程 0 ,你需要先完成课程 1 。

请你判断是否可能完成所有课程的学习?如果可以,返回 true ;否则,返回 false 。

示例 1:

输入:numCourses = 2, prerequisites = [[1,0]]
输出:true
解释:总共有 2 门课程。学习课程 1 之前,你需要完成课程 0 。这是可能的。

示例 2:

输入:numCourses = 2, prerequisites = [[1,0],[0,1]]
输出:false
解释:总共有 2 门课程。学习课程 1 之前,你需要先完成​课程 0 ;并且学习课程 0 之前,你还应先完成课程 1 。这是不可能的。

提示:

  • 1 <= numCourses <= 2000
  • 0 <= prerequisites.length <= 5000
  • prerequisites[i].length == 2
  • 0 <= ai, bi < numCourses
  • prerequisites[i] 中的所有课程对 互不相同

解题思路

每门课是一节点,先修关系是有向边

  • bi → ai 表示上课方向,先学 bi 再学 ai

  • 如果图中有环,就无法修完全部课程。

  1. 建立 邻接表 graph入度数组 in_degree
  2. 所有入度为 0 的点入队(无依赖的课可以先学)
  3. 进行 BFS:
    1. 每弹出一个节点 u,将其邻接的节点 v 入度减一

    2. 如果 v 入度变为 0,也加入队列

  4. 最终计数是否等于总课程数 numCourses

完整代码

python

from collections import deque
from typing import Listclass Solution:def canFinish(self, numCourses: int, prerequisites: List[List[int]]) -> bool:graph = [[] for _ in range(numCourses)]in_degree = [0] * numCoursesfor a, b in prerequisites:graph[b].append(a)in_degree[a] += 1queue = deque([i for i in range(numCourses) if in_degree[i] == 0])count = 0while queue:node = queue.popleft()count += 1for neighbor in graph[node]:in_degree[neighbor] -= 1if in_degree[neighbor] == 0:queue.append(neighbor)return count == numCourses

java

import java.util.*;class Solution {public boolean canFinish(int numCourses, int[][] prerequisites) {List<List<Integer>> graph = new ArrayList<>();int[] inDegree = new int[numCourses];for (int i = 0; i < numCourses; i++) {graph.add(new ArrayList<>());}for (int[] pair : prerequisites) {int a = pair[0], b = pair[1];graph.get(b).add(a);inDegree[a]++;}Queue<Integer> queue = new LinkedList<>();for (int i = 0; i < numCourses; i++) {if (inDegree[i] == 0) queue.offer(i);}int count = 0;while (!queue.isEmpty()) {int node = queue.poll();count++;for (int neighbor : graph.get(node)) {inDegree[neighbor]--;if (inDegree[neighbor] == 0) queue.offer(neighbor);}}return count == numCourses;}
}

213.打家劫舍II

你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都 围成一圈 ,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警 。

给定一个代表每个房屋存放金额的非负整数数组,计算你 在不触动警报装置的情况下 ,今晚能够偷窃到的最高金额。

示例 1:

输入:nums = [2,3,2]
输出:3
解释:你不能先偷窃 1 号房屋(金额 = 2),然后偷窃 3 号房屋(金额 = 2), 因为他们是相邻的。

示例 2:

输入:nums = [1,2,3,1]
输出:4
解释:你可以先偷窃 1 号房屋(金额 = 1),然后偷窃 3 号房屋(金额 = 3)。偷窃到的最高金额 = 1 + 3 = 4 。

示例 3:

输入:nums = [1,2,3]
输出:3

提示:

  • 1 <= nums.length <= 100
  • 0 <= nums[i] <= 1000

解题思路

我们把问题转换为两个不包含首尾同时偷的情况:

  • 不偷第一个房子 → 考虑 nums[1:]

  • 不偷最后一个房子 → 考虑 nums[:-1]

标准动态规划:

  • 定义:dp[i] 表示前 i 间房最多能偷多少钱;

完整代码

python

from typing import Listclass Solution:def rob(self, nums: List[int]) -> int:if len(nums) == 1:return nums[0]def rob_linear(nums: List[int]) -> int:prev, curr = 0, 0for num in nums:prev, curr = curr, max(curr, prev + num)return currreturn max(rob_linear(nums[1:]), rob_linear(nums[:-1]))

java

class Solution {public int rob(int[] nums) {if (nums.length == 1) return nums[0];return Math.max(robRange(nums, 0, nums.length - 2),robRange(nums, 1, nums.length - 1));}private int robRange(int[] nums, int start, int end) {int prev = 0, curr = 0;for (int i = start; i <= end; i++) {int temp = curr;curr = Math.max(curr, prev + nums[i]);prev = temp;}return curr;}
}

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

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

相关文章

深入理解 macOS 的 quarantine、xattr 与 Gatekeeper

在 macOS 上安装第三方应用时&#xff0c;你是否遇到过如下提示&#xff1f; “xxx.app 已损坏&#xff0c;无法打开。”“无法打开‘xxx.app’&#xff0c;因为它来自身份不明的开发者。”“你确定要打开这个应用吗&#xff1f;它是从互联网下载的。” 这些提示背后&#xff0…

FastAPI学习笔记记录

FastAPI 学习笔记 最近在公司中需要写接口&#xff0c;选取了fastapi这个框架&#xff0c;一个原因是FastAPI 是主流框架&#xff0c;同时FastAPI 有着高性能&#xff0c;支持异步和高并发。 FastAPI 安装 直接用下面两行命令进行安装 pip3 install fastapi pip install uvicor…

HTML(上)

1.web标准主要包括结构(Structure)、表现(Presentation)和行为(Behavior)三个方面。1.1 结构结构用于对网页元素进行整理和分类&#xff0c;核心技术&#xff1a;HTML。 HTML (HyperText Markup Language)&#xff1a;超文本标记语言&#xff0c;用于定义网页的内容和结构&…

杭州乐湾科技有限公司的背景、产品体系与技术能力的全方位深度分析

杭州乐湾科技有限公司的背景、产品体系与技术能力的全方位深度分析 文章目录杭州乐湾科技有限公司的背景、产品体系与技术能力的全方位深度分析**一、公司背景&#xff1a;智慧养老赛道领跑者****1. 基础信息****2. 发展里程碑****二、产品体系&#xff1a;全域智慧养老解决方案…

kettle从入门到精通 第101课 ETL之kettle DolphinScheduler调度kettle

1、下载DolphinSchedulerDolphinScheduler官网下载安装包&#xff0c;选择合适的版本进行下载&#xff0c;地址为https://dolphinscheduler.apache.org/zh-cn/docs/3.1.9/guide/installation/standalone2、启动 DolphinScheduler Standalone Server我这里仅仅为了测试使用&…

微信小程序121~130

1.小程序功能开发-首页功能 通过并发请求获取首页的数据。 // 导入封装的网络请求模块实例 import http from ../utils/http // 定义接口api函数 export const reqIndexData () > {// 通过方式请求并获取首页数据&#xff0c;提升页面渲染速度// 通过Promise.all进行并发请…

Java Stream流:高效数据处理全解析

Java Stream 流详解 Stream 是 Java 8 引入的 API&#xff0c;用于高效处理集合数据&#xff08;如 List、Set、Map 等&#xff09;。它支持函数式编程风格&#xff0c;能实现复杂的查询、过滤、映射等操作&#xff0c;并支持并行处理以提升性能。核心特点 非存储数据结构&…

光子精密双目3D线激光轮廓测量仪,摆脱视觉盲区,1台更比2台强!

光子精密双目3D线激光轮廓测量仪&#xff08;GL-8160D&#xff09;&#xff0c;在GL-8000系列的基础上创新升级。GL-8160D采用全新双目单线设计&#xff0c;突破传统3D视觉检测限制&#xff0c;而且不受外部拼接标定误差影响&#xff0c;有效消除单目盲区&#xff0c;抗光干扰能…

基于Linux驱动的可见光通信方案 —— 开源 OpenVLC 平台入门(附 BeagleBone Black 驱动简单解析)

60 美元玩转 Li-Fi —— 开源 OpenVLC 平台入门&#xff08;附 BeagleBone Black 及驱动解析&#xff09;一、什么是 OpenVLC&#xff1f; OpenVLC 是由西班牙 IMDEA Networks 研究所推出的开源可见光通信&#xff08;VLC / Li-Fi&#xff09;研究平台。它把硬件、驱动、协议栈…

Git系列--4.Git分支设计规范

目录 一、了解开发环境 1.1概念阐述 1.2系统概括图 二、设计规范之GitFlow模型 2.1具体分支概念 2.1.1master 分⽀ 2.1.2release 分⽀ 2.1.3develop 分⽀ 2.1.4feature 分⽀ 2.1.5hotfix 分⽀ 2.2宏观表格 三、分支流程图 一、了解开发环境 1.1概念阐述 对于开发人员…

【时间之外】AI在农机配件设计场景的应用

目录 农机制造业痛点 AI场景畅想 落后就要挨打 农机制造业痛点 最近&#xff0c;我与一位在制造业摸爬滚打多年的老友相聚。酒过三巡&#xff0c;话题渐渐转到他的事业上。他兴致勃勃地跟我讲起&#xff0c;自己正主导着一个规模达几千万的项目&#xff0c;生产基地远在孟加…

基于定制开发开源AI智能名片与S2B2C商城小程序的旅游日志创新应用研究

摘要&#xff1a;本文探讨了旅游日志在记录旅行美景与人物中的重要性&#xff0c;结合当下数字化发展趋势&#xff0c;引入定制开发开源AI智能名片与S2B2C商城小程序的概念。分析如何将这两者与旅游日志风格元素相融合&#xff0c;打造一种创新的旅游记录与分享模式&#xff0c…

XGBoosting算法详解(Boosting思想的代表算法)

文章目录相关文章一、Boosting思想&#xff1a;从弱到强的串行提升二、XGBoost算法思想&#xff1a;GBDT的极致优化三、XGBoost数学原理&#xff1a;从目标函数到树分裂3.1 目标函数定义3.2 正则化项&#xff1a;控制树的复杂度3.3 泰勒二阶展开&#xff1a;简化目标函数3.4 化…

Vue + Element UI 实现选框联动进而动态控制选框必填

目录 一. 需求描述 二. 解决思路 三. 代码实现 四. 效果展示 一. 需求描述 如下图所示&#xff0c;新增人员页面&#xff0c;有字段"Leader DS"和"Leader DS名称"。 现在我要在字段"Leader DS"和"Leader DS名称"字段下方再添加一…

高通SG882G平台(移远),Ubuntu22编译:1、下载代码

不要使用Ubuntu24&#xff0c;不稳定。 docker听着美好&#xff0c;其实也有问题。比如你给别人的时候&#xff0c;虚拟机直接给过去&#xff0c;马上就能用。 安装工具 sudo apt-get install -y \ diffstat xmlstarlet texinfo chrpath gcc-aarch64-linux-gnu libarchive-d…

Android音视频探索之旅 | C++层使用OpenGL ES实现视频渲染

一.前言 在学习音视频的过程中&#xff0c;实现视频渲染是非常常见的&#xff0c;而渲染的方式也挺多&#xff0c;可以使用Java层的OpenGL ES进行图形渲染&#xff0c;也可以使用Ffmpeg来显示&#xff0c;还有就是通过C层的OpenGL ES来进行渲染。OpenGL ES是OpenGL三维图形API…

公链的主要特征有哪些?

公链&#xff08;公共区块链&#xff09;是指对所有人开放、无需授权即可参与的区块链&#xff0c;其主要特征包括&#xff1a;- 开放性&#xff1a;任何人都可以自由加入网络&#xff0c;参与节点运行、数据验证或交易&#xff0c;无需经过中心化机构的审核。- 去中心化&#…

博途多重背景、参数实例--(二)

引用官方技术支持&#xff1a; 《《 博图&#xff0c;怎么把DINT类型转换成TIME&#xff0c;就是MCGS触摸屏上设置时间&#xff0c;PLC里的定时器TIME 》》 我们把上面的实现&#xff0c;封装成FC,FB块&#xff08;FB程序内调用定时器指令时的选项不…

单片机基础

什么是嵌入式系统&#xff1f; 嵌入式系统通常指的是专门为某种功能设计的微型计算机系统&#xff0c;比如智能手表、家电控制板、汽车ECU等。 什么是嵌入式系统的IO&#xff1f; IO&#xff08;Input/Output&#xff0c;输入/输出&#xff09;就是嵌入式系统与外部世界“交…

全连接神经网络(MLP)原理与PyTorch实现详解

一、全连接神经网络概述全连接神经网络(Fully Connected Neural Network)&#xff0c;也称为多层感知机(Multi-Layer Perceptron, MLP)&#xff0c;是深度学习中最基础的神经网络结构之一。它由多个全连接层组成&#xff0c;每一层的神经元与下一层的所有神经元相连接。1.1 神经…