机试备考笔记 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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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 (接口) <-- 自定义…