力扣熱門算法題 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
英文地址,請注明出處:http://en.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 神經…