- 博客(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
原创 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个一组翻转
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关注的人
RSS订阅