自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(124)
  • 收藏
  • 关注

原创 linux驱动开发入门(学习记录)

linux驱动入门

2023-07-21 14:31:26 1124

原创 leetcode 638.

在 LeetCode 商店中, 有 n 件在售的物品。每件物品都有对应的价格。然而,也有一些大礼包,每个大礼包以优惠的价格捆绑销售一组物品。给你一个整数数组 price 表示物品价格,其中 price[i] 是第 i 件物品的价格。另有一个整数数组 needs 表示购物清单,其中 needs[i] 是需要购买第 i 件物品的数量。还有一个数组 special 表示大礼包,special[i] 的长度为 n + 1 ,其中 special[i][j] 表示第 i 个大礼包中内含第 j 件物品的数量,且 s

2021-10-24 17:07:35 1894 1

原创 编译原理(一)

词法分析从左到右逐行扫描源程序的字符,识别出各个单词,确定单词的类型,将识别出的单词转换成同意的(机内表示)词法单元—token的形式。- token<种别码,属性值>语法分析从词法分析器输出的token序列中识别出各类短语,并构造语法分析树。语法分析树描述了句子的语法结构语义分析收集标识符的属性信息语义检查代码优化和中间代码生成常用的中间表示形式1.三地址码;2.语法树代码优化:为改进代码所进行的等价程序变换,使其运行得更快一些,占用空间更少

2021-10-17 22:30:15 266

原创 强连通分量 Kosaraju科萨拉朱算法

#. 图G:图的所有正向边#. 图rG:图的所有反向边1. 在G上dfs,标记访问点的先后顺序,,,,递归最底层的点标记最小2.在rG上dfs,顺序从最大的点到最小的点#include<iostream>#include<vector>using namesapce std;const int NUM = 1e5+5;vector<int> G[NUM],rG[NUM];int vis[NUM], scnno[NUM];vector<int&

2021-09-19 18:49:15 252

原创 《设计模式》

简单工厂模式**客户:不想创建对象,只想拿来用建立一个工厂类(传入参数,让工厂知道应该创建什么类型的对象)**工厂方法模式**建立一个抽象工厂类,每个抽象类实现 去实现一种类方法简单工厂模式 +“开闭原则”=工厂方法模式**单例模式** 这个系统中只能有一个A类型的对象不能用 new 创建对象—>令构造函数私有增加静态私有的当前类的指针变量提供静态的对外接口,让用户获得单例对象懒汉式 碰到多线程------>线程不安全 ,不符合单例模式饿.

2021-08-03 14:07:06 173

原创 《设计原则》

单一职责原则 类的职责单一:每个类应该只承担一种职责,实现一种功能开闭原则 对扩展开放,对修改关闭:对于已经实现的类,可以通过扩展增加实现,但不能对已经写好的代码进行修改。 建立一个抽象基类,每个不同的类对其进行实现,完成不同的功能。迪米特法则 最小知识原则:在知道最小的情况下,把事情完成 抽象基类————>多个类继承实现 中介类(对外提供接口):vector<抽象> 合成复用原则 用组合代替继承:多用组合,少用继承依赖..

2021-07-31 17:56:05 155

原创 Leetcode. 16. 最接近的三数之和

给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。示例:输入:nums = [-1,2,1,-4], target = 1输出:2解释:与 target 最接近的和是 2 (-1 + 2 + 1 = 2) 。排序+双指针 进行排序 先确定一个数,再用双指针从两边循环,class Solution {public: int ..

2021-06-29 18:19:23 167

原创 字典树 Trie

#include<string>#include<iostream>using namespace std;struct node { node* nxt[26]; int flag; node() { for (int i = 0; i < 26; i++) nxt[i] = nullptr; }};node* root;void init() { root = new node();}void ins(string s) { int

2021-04-23 16:44:21 163

原创 最小生成树 kruskal,prim

kruskaltypedef struct s { int a, b; int weight;}Edge;void kruskal(Graph G, Edge* e, int* parent) { sort(e); //按边的权值进行排序 init(parent); //初始化并查集 for (int i = 0; i < G.num; i++) { int a_root = find(parent, e[i].a); int b_root = find(parent

2021-04-22 21:12:03 168

原创 最短路径(dijistra ,floyd)

dijistraconst int N = 10;int used[N]; //用没有用过int path[N]; //i的前一个节点int dist[N]; //最短路径void f(Graph G, int v) { for (int i = 0; i < N; i++) { used[i] = 0; dist[i] = G.edge[v][i]; if (G.edge[v][i] < Max) path[i] = v; else path[i] = -1; }

2021-04-22 20:08:43 176

原创 Leetcode(LCCPU 21)

第一题小力将 N 个零件的报价存于数组 nums。小力预算为 target,假定小力仅购买两个零件,要求购买零件的花费不超过预算,请问他有多少种采购方案。注意:答案需要以 1e9 + 7 (1000000007) 为底取模,如:计算初始结果为:1000000008,请返回 1示例 1:输入:nums = [2,5,3,5], target = 6输出:1解释:预算内仅能购买 nums[0] 与 nums[2]。示例 2:输入:nums = [2,2,1,9], target = 1

2021-04-11 08:47:32 216

原创 Leetcode (删除有序数组中的重复项 1 && 2)

Leetcode 26.给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。 双指针class Solution {public: int removeDuplicates(vector<int>& nums) { if(!nums.size()) return 0; int s=1;

2021-04-06 13:28:19 176

原创 Leetcode (每日一题)781. 森林中的兔子

森林中,每个兔子都有颜色。其中一些兔子(可能是全部)告诉你还有多少其他的兔子和自己有相同的颜色。我们将这些回答放在 answers 数组里。返回森林中兔子的最少数量。示例:输入: answers = [1, 1, 2]输出: 5解释:两只回答了 "1" 的兔子可能有相同的颜色,设为红色。之后回答了 "2" 的兔子不会是红色,否则他们的回答会相互矛盾。设回答了 "2" 的兔子为蓝色。此外,森林中还应有另外 2 只蓝色兔子的回答没有包含在数组中。因此森林中兔子的最少数量是 5: 3 只回答的

2021-04-04 13:34:59 223

原创 B树,B+树,散列表

、线性探测发法

2021-04-04 12:51:52 179

原创 Leetcode( 连续位的最小翻转次数)

995. K 连续位的最小翻转次数在仅包含 0 和 1 的数组 A 中,一次 K 位翻转包括选择一个长度为 K 的(连续)子数组,同时将子数组中的每个 0 更改为 1,而每个1 更改为 0。返回所需的 K 位翻转的最小次数,以便数组没有值为 0 的元素。如果不可能,返回 -1。示例 1:输入:A = [0,1,0], K = 1输出:2解释:先翻转 A[0],然后翻转 A[2]。示例 2:输入:A = [1,1,0], K = 2输出:-1解释:无论我们怎样翻转大小为 2 的子

2021-03-30 17:54:25 327

原创 Leetcode (6 hard 题)

基本计算器给你一个字符串表达式 s ,请你实现一个基本计算器来计算并返回它的值。示例 1:输入:s = "1 + 1"输出:2示例 2:输入:s = " 2-1 + 2 "输出:3示例 3:输入:s = "(1+(4+5+2)-3)+(6+8)"输出:23代码class Solution {public: int calculate(string s) { stack<int> a; //辅助栈 long long.

2021-03-26 17:36:48 292

原创 Leetcode 1072. 按列翻转得到最大值等行数

给定由若干 0 和 1 组成的矩阵 matrix,从中选出任意数量的列并翻转其上的 每个 单元格。翻转后,单元格的值从 0 变成 1,或者从1 变为 0 。回经过一些翻转后,行与行之间所有值都相等的最大行数。示例 1:输入:[[0,1],[1,1]]输出:1解释:不进行翻转,有 1 行所有值都相等。示例 2:输入:[[0,1],[1,0]]输出:2解释:翻转第一列的值之后,这两行都由相等的值组成。示例 3:输入:[[0,0,0],[0,0,1],[1,1,0]]输出:2解.

2021-03-25 18:03:45 196

原创 Leetcode 456. 132 模式

给你一个整数数组 nums ,数组中共有 n 个整数。132 模式的子序列 由三个整数 nums[i]、nums[j] 和 nums[k]组成,并同时满足:i < j < k 和 nums[i] < nums[k] < nums[j] 。如果 nums 中存在 132 模式的子序列 ,返回 true ;否则,返回 false 。示例 1:输入:nums = [1,2,3,4]输出:false解释:序列中不存在 132 模式的子序列。示例 2:输入:nums = .

2021-03-24 17:32:40 187

原创 Leetcode 1401. 圆和矩形是否有重叠

给你一个以 (radius, x_center, y_center) 表示的圆和一个与坐标轴平行的矩形 (x1, y1, x2,y2),其中 (x1, y1) 是矩形左下角的坐标,(x2, y2) 是右上角的坐标。如果圆和矩形有重叠的部分,请你返回 True ,否则返回 False 。换句话说,请你检测是否 存在 点 (xi, yi) ,它既在圆上也在矩形上(两者都包括点落在边界上的情况)。示例1:输入:radius = 1, x_center = 0, y_center = 0, x1.

2021-03-21 22:42:50 312

原创 Leetcode 115. 不同的子序列

给定一个字符串 s 和一个字符串 t ,计算在 s 的子序列中 t 出现的个数。字符串的一个 子序列 是指,通过删除一些(也可以不删除)字符且不干扰剩余字符相对位置所组成的新字符串。(例如,“ACE” 是 “ABCDE”的一个子序列,而 “AEC” 不是)题目数据保证答案符合 32 位带符号整数范围。示例 1:输入:s = "rabbbit", t = "rabbit"输出:3解释:如下图所示, 有 3 种可以从 s 中得到 "rabbit" 的方案。(上箭头符号 ^ 表示选取的字母.

2021-03-17 17:46:39 175

原创 Leetcode(每日一题)54. 螺旋矩阵

给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。示例 1:输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]输出:[1,2,3,6,9,8,7,4,5]代码class Solution { static constexpr int direction[4][2]={{0,1},{1,0},{0,-1},-1,0};public: vector<int> spiralOrder(ve.

2021-03-15 22:33:14 256

原创 Leetcode (每日一题)227. 基本计算器 II

给你一个字符串表达式 s ,请你实现一个基本计算器来计算并返回它的值。整数除法仅保留整数部分。示例 1:输入:s = "3+2*2"输出:7示例 2:输入:s = " 3/2 "输出:1示例 3:输入:s = " 3+5 / 2 "输出:5代码:class Solution {public: int calculate(string s) { vector<int>a; int num=0; char .

2021-03-11 13:21:38 304

原创 操作系统(前篇)

操作系统的结构操作系统接口系统调用进程与线程进程基础进程控制线程与进程或线程相关的其他技术进程同步进程的互斥进程的同步进程之间的通信管程死锁死锁的原理死锁的处理办法死锁的解除经典死锁问题处理器调度分级调度常用的调度算法多处理器调度内存管理内存相关的基本概念内存的覆盖与交换内存空间连续分配方案分页存储管理分段存储管理段页式存储管理存储保护的实现虚拟存储技术文件系统文件和文件系统文件的逻辑结构

2021-03-10 22:47:42 165

原创 Leetcode 224. 基本计算器

实现一个基本的计算器来计算一个简单的字符串表达式 s 的值。示例 1:输入:s = "1 + 1"输出:2示例 2:输入:s = " 2-1 + 2 "输出:3示例 3:输入:s = "(1+(4+5+2)-3)+(6+8)"输出:23提示:1 <= s.length <= 3 * 105s 由数字、'+'、'-'、'('、')'、和’` ’ 组成s 表示一个有效的表达式思路:1.设置标志位 sign,加入括号前面为-的话,则里面的数字都要变好,2.

2021-03-10 17:26:16 186

原创 Leetcode 每日一题1047. 删除字符串中的所有相邻重复项

给出由小写字母组成的字符串 S,重复项删除操作会选择两个相邻且相同的字母,并删除它们。在 S 上反复执行重复项删除操作,直到无法继续删除。在完成所有重复项删除操作后返回最终的字符串。答案保证唯一。示例:输入:"abbaca"输出:"ca"解释:例如,在 "abbaca" 中,我们可以删除 "bb" 由于两字母相邻且相同,这是此时唯一可以执行删除操作的重复项。之后我们得到字符串 "aaca",其中又只有 "aa" 可以执行重复项删除操作,所以最后的字符串为 "ca"。思路:“栈”代码.

2021-03-09 13:03:48 261

原创 2021-03-08

给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是回文。返回符合要求的 最少分割次数 。示例 1:输入:s = "aab"输出:1解释:只需一次分割就可将 s 分割成 ["aa","b"] 这样两个回文子串。示例 2:输入:s = "a"输出:0示例 3:输入:s = "ab"输出:1代码class Solution {public: int minCut(string s) { int n=s.size(); vec.

2021-03-08 13:26:34 253

原创 Leetcode 双周赛(47)

5680. 找到最近的有相同 X 或 Y 坐标的点给你两个整数 x 和 y ,表示你在一个笛卡尔坐标系下的 (x, y) 处。同时,在同一个坐标系下给你一个数组 points ,其中points[i] = [ai, bi] 表示在 (ai, bi) 处有一个点。当一个点与你所在的位置有相同的 x 坐标或者相同的 y坐标时,我们称这个点是 有效的 。请返回距离你当前位置 曼哈顿距离 最近的 有效 点的下标(下标从 0 开始)。如果有多个最近的有效点,请返回下标 最小的一个。如果没有有效点,请返回

2021-03-07 10:10:23 272

原创 Leetcode131. 分割回文串

给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串。返回 s 所有可能的分割方案。示例:输入: "aab"输出:[ ["aa","b"], ["a","a","b"]]思路:dp[i][j]用来存储s从i 到j的字符串是否为回文字符串;回溯算法代码class Solution { vector<vector<int> >dp; vector<string> path; vector<vect.

2021-03-07 09:36:01 242

原创 概述TCP/IP(前篇)

TCP/IP协议协议分为5层1. 物理层2. 数据链路层3. 网络层4. 传输层5. 应用层物理层1.基本概念2. 数据通信基础知识3. 奈氏准则和香农定理4. 编码与调制5. 传输介质与设备数据链路层1.基本概念2.封装成帧3.差错检测4.可靠传输5.点对点协议ppp6.媒体接入控制7.随机接入(CMCA&CMCD协议)8.MAC地址,IP地址,ARP协议9.交换机10.虚拟局域网VLAN网络层1.IPv4地址2.IP数据报的发送与转发3.

2021-03-06 23:56:52 229

原创 Leetcode 503. 下一个更大元素 II

给定一个循环数组(最后一个元素的下一个元素是数组的第一个元素),输出每个元素的下一个更大元素。数字 x的下一个更大的元素是按数组遍历顺序,这个数字之后的第一个比它更大的数,这意味着你应该循环地搜索它的下一个更大的数。如果不存在,则输出 -1。示例 1:输入: [1,2,1]输出: [2,-1,2]解释: 第一个 1 的下一个更大的数是 2;数字 2 找不到下一个更大的数; 第二个 1 的下一个最大的数需要循环搜索,结果也是 2。代码class Solution {public:.

2021-03-06 20:32:37 204

原创 Leetcode 1302. 层数最深叶子节点的和

给你一棵二叉树,请你返回层数最深的叶子节点的和。leetcode官方题解我们从根节点开始进行搜索,在搜索的同时记录当前节点的深度 dep。我们维护两个全局变量 maxdep 和 total,其中 maxdep 表示搜索到的节点的最大深度,total 表示搜索到的深度等于 maxdep 的节点的权值之和。节点 x 的深度 dep 小于 maxdep,那么我们可以忽略节点 x,继续进行搜索;节点 x 的深度 dep 等于 maxdep,那么我们将节点 x 的权值添加到 total 中;节点 x.

2021-03-05 13:46:11 240

原创 Leetcode 1379. 找出克隆二叉树中的相同节点

给你两棵二叉树,原始树 original 和克隆树 cloned,以及一个位于原始树 original 中的目标节点 target。其中,克隆树 cloned 是原始树 original 的一个 副本 。请找出在树 cloned 中,与 target 相同 的节点,并返回对该节点的引用(在 C/C++ 等有指针的语言中返回节点指针,其他语言返回节点本身)。输入: tree = [7,4,3,null,null,6,19], target = 3输出: 3解释: 上图画出了树 origina.

2021-03-05 12:59:23 190

原创 Leetcode354. 俄罗斯套娃信封问题 300. 最长递增子序列

给定一些标记了宽度和高度的信封,宽度和高度以整数对形式 (w, h)出现。当另一个信封的宽度和高度都比这个信封大的时候,这个信封就可以放进另一个信封里,如同俄罗斯套娃一样。请计算最多能有多少个信封能组成一组“俄罗斯套娃”信封(即可以把一个信封放到另一个信封里面)。说明: 不允许旋转信封。由题目可以知道,俄罗斯套娃信封,需要a[0]<b[0]且a[1]<b[1],两者同时满足才能套娃成功,很容易想到的思路就是先把宽度先从小到大排好序,那么我们就只需要讨论高度,这样就从二维降低到一维处.

2021-03-04 13:27:58 236 2

原创 Leetcode 1315. 祖父节点值为偶数的节点和

给你一棵二叉树,请你返回满足以下条件的所有节点的值之和:该节点的祖父节点的值为偶数。(一个节点的祖父节点是指该节点的父节点的父节点。) 如果不存在祖父节点值为偶数的节点,那么返回 0 。输入:root = [6,7,8,2,7,1,3,9,null,1,4,null,null,null,5] 输出:18解释:图中红色节点的祖父节点的值为偶数,蓝色节点为这些红色节点的祖父节点。代码solution 1:class Solution { int sum=0; void dfs(.

2021-03-03 22:04:00 223 2

原创 Leetcod e贪心(874. 模拟行走机器人 1518. 换酒问题)

1518. 换酒问题小区便利店正在促销,用 numExchange 个空酒瓶可以兑换一瓶新酒。你购入了 numBottles 瓶酒。如果喝掉了酒瓶中的酒,那么酒瓶就会变成空的。请你计算 最多 能喝到多少瓶酒。//直接模拟class Solution {public: int numWaterBottles(int numBottles, int numExchange) { int a=numBottles,b=numBottles; while(a&

2021-03-03 13:48:47 209

原创 Leetcode 390. 消除游戏

消除游戏给定一个从1 到 n 排序的整数列表。 首先,从左到右,从第一个数字开始,每隔一个数字进行删除,直到列表的末尾。第二步,在剩下的数字中,从右到左,从倒数第一个数字开始,每隔一个数字进行删除,直到列表开头。我们不断重复这两步,从左到右和从右到左交替进行,直到只剩下一个数字。 返回长度为 n 的列表中,最后剩下的数字。示例:输入:n = 9,1 2 3 4 5 6 7 8 92 4 6 82 66输出:6如果输入是 a 而输出是 b ,那么输入是 2a 时的输出就.

2021-03-02 13:58:41 241

原创 前缀和,(一维,二维)

Leetcode 303class NumArray {public: vector<int> ans; //前缀和数组 NumArray(vector<int>& nums) { int n=nums.size(); ans.resize(n+1); for(int i=0;i<n;i++){ ans[i+1]=ans[i]+nums[i]; }

2021-03-02 13:26:20 192

原创 Leetcode 304. 二维区域和检索 - 矩阵不可变

304. 二维区域和检索 - 矩阵不可变给定一个二维矩阵,计算其子矩形范围内元素的总和,该子矩阵的左上角为 (row1, col1) ,右下角为 (row2, col2) 。上图子矩阵左上角 (row1, col1) = (2, 1) ,右下角(row2, col2) = (4, 3),该子矩形内元素的总和为 8。示例:给定 matrix = [ [3, 0, 1, 4, 2], [5, 6, 3, 2, 1], [1, 2, 0, 1, 5], [4, 1, 0, 1, 7

2021-03-02 13:21:54 189

原创 Leetcode 1337. 矩阵中战斗力最弱的 K 行

1337. 矩阵中战斗力最弱的 K 行给你一个大小为 m * n 的矩阵 mat,矩阵由若干军人和平民组成,分别用 1 和 0 表示。请你返回矩阵中战斗力最弱的 k 行的索引,按从最弱到最强排序。如果第 i 行的军人数量少于第 j 行,或者两行军人数量相同但 i 小于 j,那么我们认为第 i 行的战斗力比第 j 行弱。军人 总是 排在一行中的靠前位置,也就是说 1 总是出现在 0 之前。 示例 1:输入:mat = [[1,1,0,0,0], [1,1,1,1,0], [1,0

2021-03-01 21:13:01 222

原创 Leetcode 1129. 颜色交替的最短路径

1129. 颜色交替的最短路径(难!!)题目在一个有向图中,节点分别标记为 0, 1, …, n-1。这个图中的每条边不是红色就是蓝色,且存在自环或平行边。red_edges 中的每一个 [i, j] 对表示从节点 i 到节点 j 的红色有向边。类似地,blue_edges 中的每一个 [i,j] 对表示从节点 i 到节点 j 的蓝色有向边。返回长度为 n 的数组 answer,其中 answer[X] 是从节点 0 到节点 X的红色边和蓝色边交替出现的最短路径的长度。如果不存在这样的路径,那

2021-03-01 14:01:59 295

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除