自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 主机与VMware虚拟机共享文件夹:解决虚拟机找不到共享文件夹问题

然后,再次进入 /mnt/hgfs 查看 (注意:挂载后必须要再次进入/mnt/hgfs才能查看到共享的文件夹)-o allow_other 表示普通用户也能访问共享目录。/mnt/hgfs/ 是挂载点,我们也可以修改为其它挂载点。1.已安装vmware tool。然而,自己在虚拟机中并未找到共享的两个文件夹。附开机自动挂载:追加到/etc/fstab即可。2.已设置共享文件夹。因为我们还缺少一个重要步骤:挂载操作。

2025-11-07 14:08:22 321

原创 BM74 数字字符串转化成IP地址(递归回溯 + 暴力循环

/*题解思路:使用index表示下一个数在字符串s的起始位置,tmp表示已经切分的个数递归边界: 已经分为4段了,且合法(tmp.size()==4)回溯阶段: 将加入到tmp中的删除,且index要复原判断合法: 1. index不能越界 2. num <=255 3 . 长度不为1且s[index] 不为0*/void solve(string s,vector<string>& ans,vector<string> tmp,int index){...

2022-03-26 17:25:49 343

原创 BM61 矩阵最长递增路径(描述给定一个 n 行 m 列矩阵 matrix ,矩阵内所有数均为非负整数。 你需要在矩阵中找到一条最长路径,使这条路径上的元素是递增的。并输出这条最长路径的长度。

/*描述给定一个 n 行 m 列矩阵 matrix ,矩阵内所有数均为非负整数。 你需要在矩阵中找到一条最长路径,使这条路径上的元素是递增的。并输出这条最长路径的长度。这个路径必须满足以下条件:1. 对于每个单元格,你可以往上,下,左,右四个方向移动。 你不能在对角线方向上移动或移动到边界外。2. 你不能走重复的单元格。即每个格子最多只能走一次。带备忘录的递归,*/int dfs(vector<vector<int> > &matrix,int x,in.

2022-03-26 16:46:50 530

原创 BM43 包含min函数的栈(定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的 min 函数,输入操作时保证 pop、top 和 min 函数操作时,栈中一定有元素。此栈包含的方法

/*数据栈和最小栈对齐使每次pop和push都是两个栈一起,*/class Solution {public: stack<int> normal, minval; void push(int value) { normal.push(value); if (minval.empty()) { minval.push(value); } else { i...

2022-03-26 16:14:58 439

原创 BM45 滑动窗口的最大值(单调栈的代码框架

/*给定一个长度为 n 的数组 nums 和滑动窗口的大小 size ,找出所有滑动窗口里数值的最大值。例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为{4,4,6,6,6,5}; 针对数组{2,3,4,2,6,2,5,1}的滑动窗口有以下6个: {[2,3,4],2,6,2,5,1}, {2,[3,4,2],6,2,5,1}, {2,3,[4,2,6],2,5,1}, {2,3,4,[2,6,2],5,1}, {2,3,4,2,[.

2022-03-26 11:27:38 230

原创 BM38 在二叉树中找到两个节点的最近公共祖先

TreeNode* find(TreeNode* root,int o1,int o2) { if(!root) return root; if(root->val == o1 || root->val == o2) return root; TreeNode* t1 = find(root->left,o1,o2); TreeNode* t2 = find(root->right,o1,o2); ...

2022-03-26 11:22:04 338

原创 BM76 正则表达式匹配(请实现一个函数用来匹配包括‘.‘和‘*‘的正则表达式。1.模式中的字符‘.‘表示任意一个字符2.模式中的字符‘*‘表示它前面的字符可以出现任意次(包含0次)。在本题中,

/*注意考虑特殊情况,如.*,a匹配a.等情况*/bool match(string str, string pattern) { // write code here if (pattern.empty()) return str.empty(); int m = str.size(), n = pattern.size(); vector<vector<bool> > dp(m +.

2022-03-26 10:47:47 716

原创 BM97 旋转数组(描述一个数组A中存有 n 个整数,在不允许使用另外数组的前提下,将每个整数循环向右移 M( M >=0)个位置,即将A中的数据由(A0 A1 ……AN-1 )变换为(AN-M …

class Solution {public: vector<int> solve(int n, int m, vector<int>& a) { if(n<=1) return a;//当数组长度<=1,不管怎么移动都不变 if(m%n==0) return a;//当移动n的倍数,相当于没移动 int k=m%n;//计算需要右移的位数,因为可能m>n reverse(a.b...

2022-03-25 23:21:24 807

原创 BM82 买卖股票的最好时机(三)

/*描述假设你有一个数组prices,长度为n,其中prices[i]是某只股票在第i天的价格,请根据这个价格数组,返回买卖股票能获得的最大收益1. 你最多可以对该股票有两笔交易操作,一笔交易代表着一次买入与一次卖出,但是再次购买前必须卖出之前的股票2. 如果不能获取收益,请返回03. 假设买入卖出均无手续费 要求: 空间复杂度 O(n)O(n),时间复杂度 O(n)O(n)进阶:空间复杂度 O(1)O(1),时间复杂度 O(n)O(n)*/int maxProfit(vecto...

2022-03-25 23:14:03 228

原创 BM96 主持人调度(二)(需用到大顶堆的题目

/*有 n 个活动即将举办,每个活动都有开始时间与活动的结束时间,第 i 个活动的开始时间是 starti ,第 i 个活动的结束时间是 endi ,举办某个活动就需要为该活动准备一个活动主持人。一位活动主持人在同一时间只能参与一个活动。并且活动主持人需要全程参与活动,换句话说,一个主持人参与了第 i 个活动,那么该主持人在 (starti,endi) 这个时间段不能参与其他任何活动。求为了成功举办这 n 个活动,最少需要多少名主持人。大顶堆是priority_queue<int,vect.

2022-03-25 23:11:29 785

原创 BM87 合并两个有序的数组(将A,B合并在A数组中;A数组长度住够:从A末尾开始写入,这样可以避免数据被覆盖

void merge(int A[], int m, int B[], int n) { int i=m-1,j=n-1,p=m+n-1;//i,j指针指向原末尾,p指针指向合并后的A末尾 while(~i&&~j) {// ~i <==> i>=0,因为-1取反过后返回的是0,位运算一般情况比其他运算符速度要快 A[p--]=A[i]>B[j]?A[i--]:B[j--];//合并A、B数组, 比较i..

2022-03-25 19:12:30 153

原创 BM90 最小覆盖子串(滑动窗口的实现代码)

...

2022-03-25 19:09:37 124

原创 BM94 接雨水问题

/*给定一个整形数组arr,已知其中所有的值都是非负的,将这个数组看作一个柱子高度图,计算按此排列的柱子,下雨之后能接多少雨水。(数组以外的区域高度视为0)思路:向左向右各遍历一次,得到每个点的左侧最高柱子和右侧最高柱子,从而确定当前柱子的最大盛水量 = min(left,right);*/class Solution {public: /** * max water * @param arr int整型vector the array * @retu...

2022-03-25 19:00:47 153

原创 BM95 分糖果问题

/*描述一群孩子做游戏,现在请你根据游戏得分来发糖果,要求如下:1. 每个孩子不管得分多少,起码分到一个糖果。2. 任意两个相邻的孩子之间,得分较多的孩子必须拿多一些糖果。(若相同则无此限制)给定一个数组 arrarr 代表得分数组,请返回最少需要多少糖果。要求: 时间复杂度为 O(n)O(n) 空间复杂度为 O(n)O(n)解法1:左右各遍历一次把所有孩子的糖果数初始化为 1;先从左往右遍历一遍,如果右边孩子的评分比左边的高,则右边孩子的糖果数更新为左边孩子的 糖果数加 1;.

2022-03-25 18:53:44 313

原创 BM90 最小覆盖子串

/*给出两个字符串 s 和 t,要求在 s 中找出最短的包含 t 中所有字符的连续子串。数据范围:0 \le |S|,|T| \le100000≤∣S∣,∣T∣≤10000,保证s和t字符串中仅包含大小写英文字母要求: 时间复杂度 O(n)O(n)例如:S ="XDOYEZODEYXNZ"S="XDOYEZODEYXNZ"T ="XYZ"T="XYZ"找出的最短子串为"YXNZ""YXNZ".*/string minWindow(string S, string T) { in.

2022-03-25 16:24:07 4121

原创 NC138 题解 | #矩阵最长递增路径# 利用备忘录来提高时间效率

class Solution {public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * 递增路径的最大长度 * @param matrix int整型vector<vector<>> 描述矩阵的每个数 * @return int整型 */ int dfs(vector<vector<int> > &mat,vector<...

2022-03-23 17:48:25 172

原创 BM32 合并二叉树:已知两颗二叉树,将它们合并成一颗二叉树。合并规则是:都存在的结点,就将结点值加起来,否则空的位置就由另一个树的结点来代替

public TreeNode mergeTrees (TreeNode t1, TreeNode t2) { if(t1 == null) return t2; if(t2 == null) return t1; t1.val += t2.val; t1.left = mergeTrees(t1.left, t2.left); t1.right = mergeTrees(t1.right, t2.right); ...

2022-03-23 17:43:45 354

原创 BM30 二叉搜索树与双向链表:输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。如下图所示

class Solution { TreeNode *pre, *res; public: void dfs(TreeNode* root) { if (root == nullptr) return; dfs(root->left); pre == nullptr ? res = root : pre->right = root; // pre记录双向链表中位于root左侧的节点, 如果pre不为空...

2022-03-22 11:25:48 482

原创 BM27 按之字形顺序打印二叉树

/*给定一个二叉树,返回该二叉树的之字形层序遍历,(第一层从左向右,下一层从右向左,一直这样交替)数据范围:0 \le n \le 15000≤n≤1500,树上每个节点的val满足 |val| <= 1500∣val∣<=1500要求:空间复杂度:O(n)O(n),时间复杂度:O(n)O(n)使用reverse更方便一点*//*struct TreeNode { int val; struct TreeNode *left; struct Tree.

2022-03-22 11:23:27 1334

原创 BM21 旋转数组的最小数字

/*有一个长度为 n 的非降序数组,比如[1,2,3,4,5],将它进行旋转,即把一个数组最开始的若干个元素搬到数组的末尾,变成一个旋转数组,比如变成了[3,4,5,1,2],或者[4,5,1,2,3]这样的。请问,给定这样一个旋转数组,求数组中的最小值。数据范围:1 \le n \le 100001≤n≤10000,数组中任意元素的值: 0 \le val \le 100000≤val≤10000要求:空间复杂度:O(1)O(1) ,时间复杂度:O(logn)O(logn)方法二:二分查找.

2022-03-22 11:21:10 122

原创 BM20 数组中的逆序对

/*在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P mod 1000000007数据范围: 对于 50\%50% 的数据, size\leq 10^4size≤10 4 对于 100\%100% 的数据, size\leq 10^5size≤10 5 数组中所有数字的值满足 0 \le val \le 10000000≤val≤1000000要求:空.

2022-03-22 11:19:09 121

原创 BM19 寻找峰值

class Solution {public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param nums int整型vector * @return int整型 */ int findPeakElement(vector<int>& nums) { // write code here ...

2022-03-22 11:15:43 98

原创 BM12 单链表的排序

/*给定一个节点数为n的无序单链表,对其按升序排序。数据范围:0 < n \le 1000000<n≤100000要求:空间复杂度 O(n)O(n),时间复杂度 O(nlogn)O(nlogn)主要通过递归实现链表归并排序,有以下两个环节:1、分割 cut 环节: 找到当前链表中点,并从中点将链表断开(以便在下次递归 cut 时,链表片段拥有正确边界); 使用 fast,slow 快慢双指针法,奇数个节点找到中点,偶数个节点找到中心左边的节点。 找到中点 slow .

2022-03-22 11:11:38 463

原创 BM11 链表相加(二)

/*假设链表中每一个节点的值都在 0 - 9 之间,那么链表整体就可以代表一个整数。给定两个这种链表,请生成代表两个整数相加值的结果链表。数据范围:0 \le n,m \le 10000000≤n,m≤1000000,链表任意值 0 \le val \le 90≤val≤9要求:空间复杂度 O(n)O(n),时间复杂度 O(n)O(n)例如:链表 1 为 9->3->7,链表 2 为 6->3,最后生成新的结果链表为 1->0->0->0。方法一:反转链表.

2022-03-22 11:09:17 130

原创 两个链表的第一个公共结点

/*这里先假设链表A头结点与结点8的长度 与 链表B头结点与结点8的长度相等,那么就可以用双指针。初始化:指针ta指向链表A头结点,指针tb指向链表B头结点如果ta == tb, 说明找到了第一个公共的头结点,直接返回即可。否则,ta != tb,则++ta,++tb所以现在的问题就变成,如何让本来长度不相等的变为相等的?假设链表A长度为a, 链表B的长度为b,此时a != b但是,a+b == b+a因此,可以让a+b作为链表A的新长度,b+a作为链表B的新长度。如图:*/c...

2022-03-22 11:06:46 837

原创 合并k个已排序的链表

合并 k 个升序的链表并将结果作为一个升序的链表返回其头节点。

2022-03-22 11:02:08 616

原创 链表中的节点每k个一组翻转

class Solution {public: ListNode* reverseKGroup(ListNode* head, int k) {// if(!head || k <= 1) return head;// ListNode* cur = head;// ListNode* pre = nullptr;// ListNode* next = nullptr;// for(i...

2022-03-22 10:59:02 1162

空空如也

空空如也

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

TA关注的人

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