自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(66)
  • 问答 (1)
  • 收藏
  • 关注

原创 gerrit查看用户是否存在

ssh -p 29418 -i ~/.ssh/id_rsa ip -l username

2021-05-07 21:13:31 596

原创 打家劫舍 II

力扣地址动态规划:因为题目说到住户首尾相连,需要考虑的问题是,当偷了第一家,就不能偷最后一家,因此得出两个偷窃范围 0 到(n - 2),1 到 (n - 1),得出这两个范围的最大值,然后再比较最大值即为偷窃最高金额考虑特殊情况,当只有一家时直接返回当有两家或三家时,获取最大值超过三家则有如下状态转移方程:class Solution {public: int rob(vector<int>& nums) { int l.

2021-04-16 22:28:00 87

原创 寻找旋转排序数组中的最小值

力扣地址二分查找:先设置中间值 mid,查看 nums[mid] < nums[right] 是否成立,如果成立则表明从 mid 到 left 都是顺序的,因此 mid 之后的数都不可能是最小值,因此 right= mid。当nums[mid] < nums[right] 不成立时,说明最小数在 mid 和 right 的中间,此时 mid 肯定不是最小数,因为所有数字都不相等,因此 left = mid + 1。通过上述两个条件的夹逼,最终 right 会等于 left,这样.

2021-04-08 22:00:01 106

原创 搜索旋转排序数组 II

力扣地址二分查找:由于数组中的值会重复,所以需要考虑二分时,开头中间和结尾的值相等的问题,已经一些边界问题class Solution {public: bool search(vector<int>& nums, int target) { int len = nums.size(); if (!len) return false; if (1 == len) return nums[0] == target;

2021-04-07 23:16:00 73

原创 笨阶乘

力扣地址栈:按照题目要求,乘除加减依次进行,那么我们只需要按照执行次序,定义一个index变量记录执行次序,依次进行以上操作,并且入栈,最后将所有结果全部相加返回即可class Solution {public: int clumsy(int N) { vector<int> s; s.push_back(N); --N; int index = 0; while (N) {

2021-04-01 23:00:36 87

原创 有效的括号

力扣地址栈:相同方向直接入栈,不同方向,只需匹配是否和当前栈顶字符匹配,不匹配直接返回 falseclass Solution {public: bool isValid(string s) { vector<char> st; for (auto c : s) { if (st.size()) { if ('(' == c || '[' == c || '{' == c) st.

2021-03-31 23:17:28 87

原创 柱状图中最大的矩形

力扣地址单调栈:按题目要求,需要知道每个位置的矩形可以扩展到的最远距离,由于比当前位置的值小的矩形是不可能与当前位置共同组成矩形的,所以题目可以理解为,寻找当前位置的左右两边第一个比自己小的值,用这两个位置的 index 相减得到宽度,再乘以当前位置的长度,如此得到当前位置的最大矩形面积,对每个位置都如此,寻找最大的矩形面积。如此,我们只需要对数组左右个遍历一次,就可以知道每个位置的左右第一个比自己小的值的位置。class Solution {public: int la

2021-03-30 22:18:08 90

原创 多道批处理调度

题目描述:某多处理器多道批处理系统一次允许将所有作业调入内存,且能并行执行,其并行数等于处理机个数。该系统采用SJF的调度方式(最短作业优先,系统在调度时,总是优先调度执行处理时间最短的作业)。现给定处理器个数m,作业数n,每个作业的处理时间分别为t1,t2 ... tn。当 n > m时,首先处理时间短的 m 个作业进入处理器处理,其他的进入等待,当某个作业处理完成时,依次从等待队列中取出处理时间最短的作业进入处理。求系统处理完所有作业的耗时为多少?注:不考虑作业切换的消耗。.

2021-03-29 20:49:19 1511 3

原创 每日温度

力扣地址单调栈:分解题目意思,其实就是查找当前数字之后的第一个比自己大的数字的差值,如果没有则为0,暴力法可以一一向后遍历,其实我们可以像数组反向遍历,将数字入栈,始终保持栈顶元素比当前准备入栈元素大,否则出栈,并给当前元素记录差值class Solution {public: vector<int> dailyTemperatures(vector<int>& T) { stack<pair<int, int&gt

2021-03-25 23:08:21 80

原创 跳跃游戏 II

力扣地址贪心:每次都在可跳跃的范围内寻找下一个最远的跳跃点,最远的跳跃点就是可跳跃范围内,当前位置加上当前位置的值的最大值:max_pos = max(i + nums[i], max_pos)class Solution {public: int jump(vector<int>& nums) { int len = nums.size(); int cnt = 0; int end = 0; in

2021-03-24 22:07:39 93

原创 单词的压缩编码

力扣地址首先明确解体思路,其实就是去除所有是后缀的单词,剩下的单词长度全部累加,再加上单词个数就是结果长度存储后缀:将所有字符串全部存入哈希 set 中,然后遍历所有字符的后缀,再去哈希 set 中查找是否有匹配的单词,如果匹配则删除class Solution {public: int minimumLengthEncoding(vector<string>& words) { std::unordered_set<std::strin

2021-03-21 20:52:30 168

原创 无重复字符的最长子串

力扣地址双指针滑动窗口:定义一个 set 集合,通过 left 和 right 两个指针,right 不断向后移动,将字符放入 set 集合,当有重复值时,将 left 右移,并删除 set 中的重复值,每次加入新的无重复值时,再次比较最大值class Solution {public: int lengthOfLongestSubstring(string s) { if (s.empty()) return 0; int len = s.l

2021-03-18 22:57:06 69

原创 linux 设置代理地址

gsettings set org.gnome.system.proxy mode 'manual'gsettings set org.gnome.system.proxy.http host '127.0.0.1'gsettings set org.gnome.system.proxy.http port 7890

2021-03-18 17:33:00 432

原创 最大正方形

力扣地址

2021-03-17 23:09:16 75

原创 岛屿数量

力扣地址深度优先搜索:用 record 记录数量两层 for 循环开始遍历找到一个为 1 的值后,将 record加 1,并将对当前值进行深度优先搜索,将周围所有为 1 的值全部置为 0。class Solution {public: int numIslands(vector<vector<char>>& grid) { if (grid.empty() || grid[0].empty()) return 0; .

2021-03-16 22:38:35 67

原创 最长回文子串

力扣地址暴力:(力扣过不了)直接两层 for 循环遍历穷举所有区间,判断所有区间是否是回文用了两种暴力法:第一种、通过左右指针判断是否相等,不相等就返回false第二种、通过字符串反转,因为回文的特性,左右、反转都相等需要注意的边界问题:1、是当字符串小于 2 时就是回文了,直接返回2、大于 2 时,最小的回文长度是 13、字串的长度是 j - i + 1class Solution {public: string longestPalindrome(st

2021-03-16 00:02:31 87

原创 重建二叉树

力扣地址递归:利用二叉树的特性,先序遍历的先遍历父节点,再遍历左子树,再遍历右子树,中序遍历,是先遍历左子树,再遍历头结点,再遍历右子树,如此先序遍历的数组的第一个数字,就是中序遍历数组的中间某个数字,并且这个数字将中序遍历数组一分为二,左边为左子树,右边为右子树,如此,我们只需要一个 hash map 存储中序遍历数组的每一个值的下标,就可以快速定位中序遍历数组的父节点位置,快速区分左右子树/** * Definition for a binary tree node. *

2021-03-11 23:21:57 79

原创 二维数组中的查找

力扣地址线性查找:从数组的右上角开始查找,数组当前值比 target 大则下标左移,数组当前值比 target 小则下标下移,如此就能找到 target ,或者跳出循环class Solution {public: bool findNumberIn2DArray(vector<vector<int>>& matrix, int target) { if (!matrix.size() || !matrix[0].size()) {

2021-03-10 22:55:08 61

原创 二叉搜索树的最近公共祖先-1

力扣地址

2021-03-09 22:29:00 69

原创 字符串的排列

力扣地址回溯 + set集合:选择一个位置的字符后向后互换,遇到相同的字符直接跳过,通过 set 判断字符是否相同,递归到最后一个字符则成为一个字符串class Solution {public: vector<string> permutation(string s) { dfs(s, 0); return res; } void dfs(string& s, int index) { if (i

2021-03-09 21:47:52 81

原创 对称的二叉树

力扣地址对称二叉树性质:左右子树值相等或者都为空左子树的左子树(即LL)的值等于右子树的右子树(即RR)的值左子树的右子树(即LR)的值等于右子树的左子树(即RL)的值/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), le

2021-03-06 21:55:48 90

原创 在排序数组中查找数字-1

力扣地址二分查找:class Solution {public: int search(vector<int>& nums, int target) { if (!nums.size()) return 0; int low = 0; int high = nums.size() - 1; int pivot; while (low <= high) { p

2021-03-06 14:35:52 432

原创 翻转单词顺序-1

力扣地址

2021-03-06 13:06:40 64 1

原创 打印从1到最大的n位数

力扣地址输入的数字代码需要打印的位数,当前位数的最大值则全部是 9,先用10来进位,最后减一则是当前位数的最大值class Solution {public: vector<int> printNumbers(int n) { int res = 10; for (int i = 1; i < n; ++i) { res = res * 10; } vector&l

2021-03-05 00:27:44 91 1

原创 数组中出现次数超过一半的数字

力扣地址摩尔投票法:用变量 votes 记录变量 mode 的票数,当票数为 0 时,mode 更新为当前值当前值与 mode 不相等,则将 votes 减一class Solution {public: int majorityElement(vector<int>& nums) { int mode = 0; int votes = 0; for (int n : nums) { if

2021-03-05 00:19:59 87 1

原创 包含min函数的栈

力扣地址用两个栈去接受数据,其中一个栈在入栈时,只更新比他小的值,这样保证栈顶最小,在出栈时,比较两个栈的栈顶元素,相同一起出栈,代码用 vector 模拟栈class MinStack {public: /** initialize your data structure here. */ MinStack() { } void push(int x) { s1.push_back(x); if (s2.empty

2021-03-04 22:42:00 87 1

原创 删除链表的节点

力扣地址典型链表题目判断第一个节点是不是符合要求的,如果是,直接返回下一个节点,不是,则需要 pre 和 cur 变量来控制/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public:

2021-03-04 22:24:03 113 1

原创 二进制中1的个数

力扣地址直接使用gcc内建函数:class Solution {public: int hammingWeight(uint32_t n) { return __builtin_popcount(n); }};自己写判断方法一:逐个移位判断class Solution {public: int hammingWeight(uint32_t n) { int cnt = 0; while (n) {

2021-03-03 23:50:51 75 1

原创 二叉树的镜像

力扣地址递归:将左右子树递归调换即可实现镜像/*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode(int x) : val(x), left(NULL), right(NULL) {}* };*/class Solution {public: TreeNode*

2021-03-03 23:26:18 58 1

原创 不用加减乘除做加法

力扣地址移位:因为C++负数移位会报错,所以在与之前将负数转换为 unsigned int 类型class Solution {public: int add(int a, int b) { return b == 0 ? a : add(a^b, (unsigned int)(a&b) << 1); }};...

2021-03-02 22:50:38 53

原创 从上到下打印二叉树-2

力扣地址使用队列,开始入队前,判断当前队列长度,作为接下来需要打印的节点数量/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {

2021-03-02 22:32:32 50

原创 扑克牌中的顺子

力扣地址排序+遍历:判断条件:最大最小值相差不超过4,且其中除了 0 之外不能有重复class Solution {public: bool isStraight(vector<int>& nums) { sort(nums.begin(), nums.end()); int joker = 0; for (int i = 0; i < nums.size() - 1; ++i) { i

2021-03-02 22:20:36 148

原创 二叉树的最近公共祖先

力扣地址最近公共祖先,就是同时包含两个节点,且离得最近的,其中包括自己包含另一个节点递归:通过递归判断当前节点是否就是我需要判断的节点,如果是则返回 true,且一路返回,包含这个节点的父节点也为 true ,通过左右两个变量来判断当前节点是否就是我需要的节点/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNo

2021-03-02 21:57:43 303

原创 二叉搜索树的第k大节点

力扣地址递归:中序反向遍历,先遍历右子树,再遍历左子树,因为中序正向遍历时得到的二叉搜索树的结果集是升序数组,反向则是降序,符合题目的第k大的节点/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), rig

2021-03-02 21:11:46 86

原创 平衡二叉树-2

力扣地址后序遍历/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public: bool isBalanced(Tr

2021-03-02 00:07:55 68

原创 层序遍历

利用队列,入队出队按层输出#include <iostream>#include <vector>#include <algorithm>#include <iterator>#include <queue>struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode(int x) : val(x), left(nullpt

2021-03-01 23:27:48 233

原创 后序遍历

利用栈和一个visit变量,visit用来记录当前节点是否被拜访过#include <iostream>#include <vector>#include <algorithm>#include <iterator>#include <stack>struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode(int x) :

2021-03-01 23:22:34 736

原创 中序遍历

利用栈实现非递归遍历,先压栈,压到空时,再弹栈,实现左中右遍历#include <iostream>#include <vector>#include <algorithm>#include <iterator>#include <stack>struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode(int x) : v

2021-03-01 22:46:29 1127

原创 先序遍历

非递归通过压栈来实现遍历#include <iostream>#include <vector>#include <algorithm>#include <iterator>#include <stack>struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode(int x) : val(x), left(nullptr

2021-03-01 22:22:19 169 1

原创 圆圈中最后剩下的数字

力扣地址约瑟夫环问题:用数组模拟约瑟夫环:(力扣超时,牛客可以通过,主要力扣输入的n和m都太大了)主要有一个数组和三个变量数组 visit 表示是否被访问过cur 表示当前真实走过的位置step 表示值拜访过的步数record 表示当前拜访了多少个class Solution {public: int lastRemaining(int n, int m) { vector<bool> visit(n, false);

2021-03-01 00:46:38 60

空空如也

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

TA关注的人

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