機試備考筆記 14/31

2025年8月14日
小結:(17號整理14號的筆記,這輩子真是有了w(゚Д゚)w)昨天摔了跤大的,今天好媽媽在家,松弛。省流:6道中等,明天只學了10分鐘嘻嘻

目錄

    • LeetCode
      • 221. 最大正方形
      • 215. 數組中的第K個最大元素
      • Trie
      • 207. 課程表
      • 200. 島嶼數量
      • 198. 打家劫舍
    • Acwing
      • xxx

LeetCode

221. 最大正方形

221. 最大正方形

題目
在一個由 ‘0’ 和 ‘1’ 組成的二維矩陣內,找到只包含 ‘1’ 的最大正方形,并返回其面積。在這里插入圖片描述

f[i][j] 表示以 [i, j] 為右下角的最大正方形的邊長(動態規劃)
(前題 matrix[i][j] = 1)轉移方程:f[i][j] = min(min(f[i - 1][j], f[i][j - 1]), f[i - 1][j - 1]) + 1;

class Solution {
public:int maximalSquare(vector<vector<char>>& matrix) {int I = matrix.size(), J = matrix[0].size(), ans = 0;int f[I + 1][J + 1];memset(f, '\0', sizeof(f));for (int i = 0; i < I; i++) {if (matrix[i][0] == '1') {f[i][0] = 1;ans = 1;}}for (int j = 0; j < J; j++) {if (matrix[0][j] == '1') {f[0][j] = 1;ans = 1;}}for (int i = 1; i < I; i++) {for (int j = 1; j < J; j++) {if (matrix[i][j] == '0') continue;f[i][j] = min(min(f[i - 1][j], f[i][j - 1]), f[i - 1][j - 1]) + 1;ans = max(ans, f[i][j]);}}return ans*ans;}
};

補充一下 cpp 中用函數初始化

方法適用值一維/二維寫法特點 & 注意事項
memset只能精確賦單字節重復的模式0-1truefalse'\0'
其他整數比如 199 會出錯
memset(arr, val, sizeof(arr));? 最快的批量賦值方法(底層 memset 匯編優化)
? 對于非字節重復模式(比如 99、1234)會把字節模式重復到整個 int,導致值錯誤
fill(一維)任意可賦值類型(intchardouble、struct 等)fill(arr.begin(), arr.end(), val);? 支持任意值,安全可靠
? 比 memset 慢一點,但基本 O(n),大數組也夠快
fill(二維數組 && 原生數組)任意可賦值類型fill(&arr[0][0], &arr[0][0] + N*M, val);? 一次性對整個二維賦值,避免嵌套循環
? 必須確保是連續內存的原生數組vector<vector<T>> 的每行不連續,要逐行 fill)

215. 數組中的第K個最大元素

215. 數組中的第K個最大元素

題目
給定整數數組 nums 和整數 k,請返回數組中第 k 個最大的元素。
請注意,你需要找的是數組排序后的第 k 個最大的元素,而不是第 k 個不同的元素。
你必須設計并實現時間復雜度為 O(n) 的算法解決此問題。

qsort 的思路只是是單遍 qsort

class Solution {
public:int qsort(vector<int>& nums, int l, int r, int k) {if (l >= r) return nums[l];int i = l - 1, j = r + 1;int x = nums[(i + j) / 2];while (i < j) {do i++; while (nums[i] < x);do j--; while (nums[j] > x);if (i < j) swap(nums[i], nums[j]);}// [..., (l, ..., i=j=x_idx, ..., r), ...]// 要在 (l, ..., r) 里找到第k大的// i=j=x_idx 是 第 j-l+1 大 的if (j - l + 1 >= k) return qsort(nums, l, j, k);else return qsort(nums, j + 1, r, k - (j - l + 1));}int findKthLargest(vector<int>& nums, int k) {return qsort(nums, 0, nums.size() - 1, nums.size() - k + 1);}
};

Trie

208. 實現 Trie(前綴樹)
不喜歡 lc 那么生硬的(好吧其實是我不會 cpp
喜歡 y 總的,貼了 Acwing

#include <iostream>
#include <string.h>
#include <algorithm>using namespace std;
int node[100005][26], point = 1, cnt[100005];void insert(string str) {int strl = str.length(), nidx = 0;for (int i = 0; i < strl; i++) {int idx = str[i] - 'a';if (node[nidx][idx] == -1) {node[nidx][idx] = point++;}nidx = node[nidx][idx];}cnt[nidx]++;
}int query(string str) {int strl = str.length(), nidx = 0;for (int i = 0; i < strl; i++) {int idx = str[i] - 'a';if (node[nidx][idx] == -1) return 0;nidx = node[nidx][idx];}return cnt[nidx];
}int main() {int N;cin >> N;string op, str;fill(&node[0][0], &node[0][0] + 100005 * 26, -1);memset(cnt, 0, sizeof(cnt));while (N--) {cin >> op >> str;// cout << str << endl;if (op == "I") insert(str);else cout << query(str) << endl;}return 0;
}

207. 課程表

207. 課程表

題目
排課,有前置課程,實質就是個拓撲排序

維護入度們,依次用入度為0的

class Solution {
public:bool canFinish(int numCourses, vector<vector<int>>& prerequisites) {vector<vector<int>> ne(numCourses);vector<int> frontcnt(numCourses, 0); // 入度數組// 建圖for (auto &pre : prerequisites) {int a = pre[0], b = pre[1]; ne[b].push_back(a); // b -> afrontcnt[a]++;}// 棧實現拓撲排序vector<int> st;for (int i = 0; i < numCourses; i++) {if (frontcnt[i] == 0) st.push_back(i);}int visited = 0;while (!st.empty()) {int u = st.back();st.pop_back();visited++;for (int v : ne[u]) {frontcnt[v]--;if (frontcnt[v] == 0) st.push_back(v);}}return visited == numCourses;}
};

200. 島嶼數量

200. 島嶼數量

題目
給你一個由 ‘1’(陸地)和 ‘0’(水)組成的的二維網格,請你計算網格中島嶼的數量。
島嶼總是被水包圍,并且每座島嶼只能由水平方向和/或豎直方向上相鄰的陸地連接形成。此外,你可以假設該網格的四條邊均被水包圍。在這里插入圖片描述

  1. 并查集(如下 demo
  2. 染色(dfs/bfs),把每輪的島嶼染成海洋

我能想到并查集也是個人物了つ﹏? 那么復雜,把二維先展開成一維(哎,一想也很好理解了

class Solution {
public:int rows, col, f[90005];int root(int idx) {if (idx != f[idx]) {f[idx] = root(f[idx]);}return f[idx];}void Union(int idx1, int idx2) {int root1 = root(idx1), root2 = root(idx2);if (root1 != root2) {f[root1] = root2;}}void P(int rows, int col){for (int i = 0; i < rows * col; i++) {if (f[i] == -1) cout << "-1" << ", ";else cout << root(i) << ", ";// ans_set.insert(f[i]);}cout << endl;}int numIslands(vector<vector<char>>& grid) {rows = grid.size(), col = grid[0].size();int direcions[2][2] = {{1, 0}, {0, 1}};for (int i = 0; i < rows; i++) {for (int j = 0; j < col; j++) {f[j + i * col] = j + i * col;}}for (int i = 0; i < rows; i++) {for (int j = 0; j < col; j++) {if (grid[i][j] == '0') {f[j + i * col] = -1;continue;}for (int d = 0; d < 2; d++) {int x = i + direcions[d][0], y = j + direcions[d][1];if (x >= rows || y >= col) continue;if (grid[x][y] == '0') continue;Union(j + col * i, x * col + y);}// P(rows, col);}}unordered_set<int> ans_set;for (int i = 0; i < rows * col; i++) {if (f[i] == -1) continue;ans_set.insert(root(i));}return ans_set.size();}
};

198. 打家劫舍

198. 打家劫舍

題目
你是一個專業的小偷,計劃偷竊沿街的房屋。每間房內都藏有一定的現金,影響你偷竊的唯一制約因素就是相鄰的房屋裝有相互連通的防盜系統,如果兩間相鄰的房屋在同一晚上被小偷闖入,系統會自動報警。
給定一個代表每個房屋存放金額的非負整數數組,計算你 不觸動警報裝置的情況下 ,一夜之內能夠偷竊到的最高金額。

很簡單的 DP,f[i][0/1] 偷/不偷

class Solution {
public:int rob(vector<int>& nums) {int cnt = nums.size();int f[100][2];memset(f, 0, sizeof(f));f[0][0] = 0, f[0][1] = nums[0];for (int i = 1; i < cnt; i++) {f[i][0] = max(f[i - 1][0], f[i - 1][1]);f[i][1] = f[i - 1][0] + nums[i];}int ans = 0;for (int i = 0; i < cnt; i++) {ans = max(max(ans, f[i][0]), f[i][1]);}return ans;}
};

Acwing

xxx

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/93573.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/93573.shtml
英文地址,請注明出處:http://en.pswp.cn/web/93573.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

dolphinscheduler中任務輸出變量的問題出現ArrayIndexOutOfBoundsException

一段腳本任務如下&#xff1a;ret/data/dolphinscheduler/loadOraTable.sh "yonbip/yonbip10.16.10.69:1521/orcl" "select t.bondcontractno,t.olcunissuemny from yonbip.bond_contract t " "/dmp/biz" "bip" "2025-08-13"…

OpenCv(二)——邊界填充、閾值處理

目錄 一、邊界填充&#xff08;Border Padding&#xff09; 1. 常見填充類型及效果 2.代碼示例 &#xff08;1&#xff09;constant邊界填充&#xff0c;填充指定寬度的像素 &#xff08;2&#xff09;REFLECT鏡像邊界填充 &#xff08;3&#xff09;REFLECT_101鏡像邊界…

Leetcode 15 java

今天復習一下翻轉二叉樹 226. 翻轉二叉樹 給你一棵二叉樹的根節點 root &#xff0c;翻轉這棵二叉樹&#xff0c;并返回其根節點。 示例 1&#xff1a; 輸入&#xff1a;root [4,2,7,1,3,6,9] 輸出&#xff1a;[4,7,2,9,6,3,1]示例 2&#xff1a; 輸入&#xff1a;root [2…

嵌入式學習的第四十九天-時鐘+EPIT+GPT定時器

一、時鐘1.時鐘系統基本概念&#xff08;1&#xff09;PLL (鎖相環, Phase-Locked Loop)作用&#xff1a;PLL是一種反饋控制電路&#xff0c;用于生成穩定的高頻時鐘信號。它通過將輸出時鐘與參考時鐘進行比較和調整&#xff0c;可以產生比輸入參考時鐘頻率高得多的輸出時鐘。倍…

Python Sqlalchemy數據庫連接

Python Sqlalchemy數據庫連接一、連接數據二、模型三、ORM操作一、連接數據 from sqlalchemy import create_engine from sqlalchemy.orm import sessionmaker# 1. 連接數據庫 dbHost postgres://用戶名:密碼主機:端口/數據庫名 engine create_engine(dbHost) # create_engi…

【Node.js】ECMAScript標準 以及 npm安裝

目錄 一、 ECMAScript標準 - 默認導出和導入 二、ECMAScript標準 - 命名導出和導入 三、包的概念 五、 npm - 安裝所有依賴 六、 npm - 全局軟件包 Node.js總結 總結不易~ 本章節對我有很大的收獲&#xff0c; 希望對你也是&#xff01;&#xff01;&#xff01; 本節素材…

NPM 、 NPX

NPM vs. NPX 簡單來說&#xff0c;npm 是一個 node 包管理器&#xff0c;npx 是一個 Node 包執行器。 NPX 是一個 Node 包執行器&#xff0c;該 Node 包可以是本地也可以是遠程的。允許開發者在無需安裝的情況下執行任意 Node 包。npm 在安裝nodejs 就自動帶了 npm install -g …

守護品質安全,防偽溯源系統打造全鏈路信任體系

一、引言在當下這個信息透明、品質至上的時代&#xff0c;防偽溯源已經成為眾多品牌保護自身利益、提升消費者信任度的重要手段。為了滿足市場上對高效、可靠的防偽溯源查詢系統的迫切需求&#xff0c;榕壹云精心打造了一款防偽溯源查詢系統。二、項目背景隨著商品市場的不斷擴…

【完整源碼+數據集+部署教程】無人機航拍視角洪水檢測與受災房屋識別圖像分割救援指導系統源碼和數據集:改進yolo11-DCNV2

背景意義 研究背景與意義 隨著全球氣候變化的加劇&#xff0c;極端天氣事件的頻率和強度不斷上升&#xff0c;洪水作為一種常見的自然災害&#xff0c;給人類社會帶來了嚴重的威脅。洪水不僅導致人員傷亡和財產損失&#xff0c;還對基礎設施和生態環境造成了深遠的影響。因此&a…

C# 結構體與類的區別是什么?

結構體是值類型是儲存在棧中獨立儲存的,數據與數據之間不會相互影響,即使將一個結構體賦值給另外一個結構體也不會相互影響。 類是一個模板,實例出來的對象是獨立的不會相互影響,但是將一個對象賦值給另一個對象時 會把指向堆內存中數據的指針賦值給另一個對象.從而發生兩個變量…

Redis GEO

Redis GEO 引言 Redis 是一款高性能的鍵值存儲系統,廣泛應用于緩存、消息隊列等領域。Redis GEO 是 Redis 2.4 版本后新增的一個功能,用于存儲地理位置信息。本文將詳細介紹 Redis GEO 的概念、使用方法以及應用場景。 什么是 Redis GEO? Redis GEO 是 Redis 的一個模塊…

Go從入門到精通系列學習路線規劃

Go從入門到精通系列學習路線規劃 目錄導航 Go從入門到精通系列學習路線規劃首頁說明 第1篇_Go語言初探_環境搭建與HelloWorld 第2篇_Go語言基礎語法_變量常量與數據類型 第3篇_Go語言控制結構_條件判斷與循環 第4篇_Go語言函數詳解 第5篇_Go語言數據結構詳解 第6篇_Go語言結構體…

Grid系統概述

目錄 概念及功能 網格對象&#xff08;Grid Object&#xff09; 和世界對象&#xff08;World Object&#xff09; 工作流程 概念及功能 TrinityCore 的 Grid 系統是一套復雜的地圖分區管理機制&#xff0c;其核心目標是通過動態管控游戲世界的區域狀態和對象生命周期&#…

一文搞懂LLM大模型!LLM從入門到精通萬字長文(2024.12月最新)

LLM從入門到精通精品文章 目錄 一、LLM基本概念 二、LLM發展歷程 三、LLM大模型的分類 四、LLM主流大模型類別 五、LLM大模型建立的流程 六、Fine-Tuning 七、Prompt-Tuning 八、超大規模參數模型Prompt-Tuning方法 8.1上下文學習 In-Context Learning 8.2.指令學習 …

Next.js跟React關系(Next.js是基于React庫的全棧框架)(文件系統路由、服務端渲染SSR、靜態生成SSG、增量靜態再生ISR、API路由)

文章目錄**1. React 是基礎&#xff0c;Next.js 是擴展****2. Next.js 解決了 React 的哪些痛點&#xff1f;****3. 核心區別****4. Next.js 的核心特性**1. **文件系統路由**2. **服務端渲染&#xff08;SSR&#xff09;**3. **靜態生成&#xff08;SSG&#xff09;**4. **增量…

Nightingale源碼Linux進行跨平臺編譯

最近使用Nightingale 需要實現對服務的監測&#xff0c;想要在Windows 系統中使用&#xff0c;看官方文檔中并不直接提供執行程序&#xff0c;原文如下&#xff1a; 準備工作 本地環境 本地已經安裝git 本地安裝git 便于后續下載源碼并進行自動編譯。 Linux操作系統環境&…

抽絲剝繭丨PostgreSQL 系國產數據庫%SYS CPU newfstatat() high 調優一例(二)

續接上回《PostgreSQL 系國產數據庫%SYS CPU newfstatat() high 調優一例&#xff08;一&#xff09;》&#xff0c;這個問題還在持續&#xff0c;并且原因并不只是一個&#xff0c;從調了文件系統級atime&#xff0c;到調整wal size減少日志被動清理&#xff0c;還有在驗證tem…

【新手入門】Android Studio 項目結構拆解,快速理解文件作用!

目 錄 一、【Project】視圖下項目結構&#xff08;真實目錄&#xff09; 二、【Android】視圖下項目結構 三、【app/】下重要文件解析 1、 build.gradle 2、AndroidManifest.xml 3、res/ 作為剛剛接觸Android開發的小白&#xff0c;使用Android Studio創建項目后&…

Python實現點云Kmeans、歐式和DBSCAN聚類

本節我們分享點云處理中的三種常見聚類方法&#xff0c;分別是K-means、歐氏與 DBSCAN聚類。具體介紹如下&#xff1a;1. K-means 聚類定義&#xff1a;一種基于距離度量的無監督學習算法&#xff0c;將數據劃分為 K 個緊湊的簇&#xff0c;使簇內數據相似度高、簇間差異大。算…

【Java后端】MyBatis-Plus 原理解析

MyBatis-Plus 原理解析 其實 MyBatis-Plus 的 Service 層設計就是為了讓開發者不用重復寫很多樣板代碼。我們來一點點剖析 UserServiceImpl、IService、UserService、ServiceImpl 之間的關系和調用鏈。1. 類/接口關系圖IService<T>▲│UserService (接口) <-- 自定義…