
学习
blhbay
这个作者很懒,什么都没留下…
展开
-
C++ 进制转换 & 二进制运算
#include<bits/stdc++.h>using namespace std;//10进制转为目标进制void show(int num, int target) { string ans = ""; if(num == 0) {cout<<"0"; return;} while(num) { int tmp = num % target; if(tmp >= 0 && tmp <= 9) ans .原创 2022-05-10 11:00:11 · 1042 阅读 · 1 评论 -
[LeetCode] 300 最长递增子序列 及返回这一子序列
在原题的基础上,维护一个pos数组,当更新dp时,保存当前节点 i 的前一个结点 j 的下标(因为dp[i]是需要dp[j]来推出的)。另外用max和lastPos分别保存最长递增子序列的最后一个(即最大)元素和下标,然后通过遍历pos数组,从后向前地把目标数组构造完成。#include<bits/stdc++.h>#include<sstream>#include<string>using namespace std;class Solution原创 2022-04-15 15:23:13 · 674 阅读 · 0 评论 -
[C++] 利用istringstream将字符串按逗号分割
参考:(2条消息) C++分割带逗号的字符串_九霄星河的博客-优快云博客_c++ 逗号分隔字符串原理:第一步:接收字符串s;第二步:遍历字符串s,把s中的逗号换成空格;第三步:通过istringstream类重新读取字符串s;注意,istringstream这个类包含在库< sstream >中,所以头文件必须包含这个库。#include<bits/stdc++.h>#include<sstream>#include&...原创 2022-04-14 15:42:42 · 1446 阅读 · 0 评论 -
[LeetCode] 394. 字符串解码
394. 字符串解码 - 力扣(LeetCode) (leetcode-cn.com)思路:借助两个栈,一个numStk存放数字,一个strStk存放字母或部分串。遍历过程中:如果s[i]为数字,更新当前遍历得数字;如果s[i]为字母,更新当前的部分串;如果s[i]为左括号“[”,则将当前遍历得到的数字、当前的部分串入栈;如果s[i]为右括号“]”,则根据numStk和strStk的两个栈顶元素,将strStk的栈顶元素合成一个新的子串,并且当前串更新为这个新的子串。当前串是从头原创 2022-04-08 19:48:23 · 566 阅读 · 0 评论 -
[LeetCode] 25. K个一组翻转链表
25. K 个一组翻转链表 - 力扣(LeetCode) (leetcode-cn.com)/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(x), next(nullptr) {} * Lis原创 2022-04-08 17:22:57 · 340 阅读 · 0 评论 -
[设计模式] 单例模式(懒汉与饿汉)
单例模式:保证一个类仅有一个实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享。实现思路:1. 私有化它的构造函数,以防止外界创建单例类的对象;2. 使用类的私有静态指针变量指向类的唯一实例,并用一个公有的静态方法获取该实例。实现方法:1. 懒汉模式:不用的时候不去初始化,所以在第一次被使用时才进行初始化2. 饿汉模式: 即迫不及待,在程序运行时立即初始化线程安全的懒汉模式:传统的单例模式是非线程安全的(线程A进入getinstance,p指针为...原创 2022-04-08 11:01:41 · 408 阅读 · 0 评论 -
[LeetCode] 215. topK 数组中最大的第k个数
题目:给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。方法:1.完全排序,即快排时间复杂度:平均O(N*logN),最坏O(N^2)2.部分排序,STL中的std::partial_sort时间复杂度:最坏O(N*logK)3.快速选择时间复杂度:平均 O(N),最坏 O(N^2)4.BFPRT时间复杂度:平均 O(N),最坏 O(N)5.堆排序:小根堆vs大根堆6.二叉搜索树...原创 2022-04-04 14:59:03 · 571 阅读 · 0 评论 -
[LeetCode] 863 二叉树中所有距离为K的节点
863. 二叉树中所有距离为 K 的结点 - 力扣(LeetCode) (leetcode-cn.com)思想就是用dfs,不过要做一些额外的处理。1. 因为从target开始遍历,所以要单独存储节点之间的父子关系,可以用unordered_map。这道题里数字都不相同,所以当前节点的值作为key即可。从头遍历一遍树,存到哈希表中。2.从target开始的dfs,向三个方向深搜:左右孩子和父节点。可以设一个depth参数记录遍历深度,好作为终止条件。需要引入一个TreeNode* from参数记原创 2022-03-24 19:59:36 · 486 阅读 · 0 评论 -
[LeetCode] 543二叉树的直径 124二叉树中最大路径和
两道题都与二叉树中的路径有关,二叉树中的路径即树中两个点之间的连线,可能经过根节点,也可能不经过。可以这么理解路径:树中某一结点,该节点处于某条路径中,路径的其余部分可能在其左右子树中或其父节点中。两道题都需要设置函数外的变量记录当前最大值。都可以用dfs来解决。543题中求最长路径,需要找到两个点,这两个点之间的路径长度最大,注意路径长度是这两个点之间点数(包括头尾)-1。dfs中:先求左右孩子到叶节点的长度,可知返回值应该是左右较大值+1,判断则是1+左+右/** * Definit原创 2022-03-22 10:29:46 · 397 阅读 · 0 评论 -
[面试题] memcpy() memmove()
memcpy()不能处理内存重叠的情况,而memmove()可以,当有重叠时,进行倒序拷贝。//memmove()void* myMemMove(void* pDst, const void* pSrc, size_t cnt) { assert(pDst != nullptr && pSrc != nullptr); char* pd = (char*)pDst; const char* ps = (const char*)pSrc; //有重叠,原创 2022-03-15 14:52:37 · 408 阅读 · 0 评论 -
[LeetCode] 原地哈希
原理:将数组元素nums[i]的值作为下标,即nums[nums[i] - 1]适用:可以使用哈希表完成,但限制空间复杂度O(1),且数组元素和数组下标(0 ~ n-1或 1 ~ n)有关287. 寻找重复数 - 力扣(LeetCode) (leetcode-cn.com)思路:不断把nums[i]与nums[nums[i] - 1]进行比较,如果不等则把nums[i]放在nums[i]-1位置,如果相等则找到了。即,1放在0的位置,2放在1的位置...class Solution {p原创 2022-03-12 15:52:14 · 431 阅读 · 0 评论 -
[LeetCode] 297 二叉树的序列化与反序列化
297. 二叉树的序列化与反序列化 - 力扣(LeetCode) (leetcode-cn.com)题意:给定二叉树,将各个结点值转化为字符串(包括中间的空结点,记为“None”);给定序列化字符串,转化为对应的二叉树。注意:序列化时对树的遍历顺序,要与反序列化时建树的顺序保持一致。反序列化:首先要按照逗号进行分割,分割为多个字符串,使用list进行存储,建树时每建好一个结点,则list去掉一个头元素。/** * Definition for a binary tree node. *原创 2022-03-10 20:22:46 · 316 阅读 · 0 评论 -
[LeetCode] 48 旋转图像
48. 旋转图像 - 力扣(LeetCode) (leetcode-cn.com)要求将一个正方形矩阵顺时针旋转90°,且要求原地操作,即直接修改,空间复杂度O(1)。思路:先沿对角线翻转,再水平翻转一次即可。可知:(i, j)关于对角线对称的坐标为(j, i),而关于竖直对称轴对称的坐标为(i, n - j - 1),n为边长。class Solution {public: void rotate(vector<vector<int>>& m原创 2022-03-10 19:39:57 · 207 阅读 · 0 评论 -
[LeetCode] 32 最长有效括号
32. 最长有效括号 - 力扣(LeetCode) (leetcode-cn.com)动态规划:dp[i]表示以i为结尾的最长有效括号子串的长度。参考题解如下:class Solution {public: int longestValidParentheses(string s) { //dp[i]为以i为末尾的最长有效括号子串的长度 vector<int> dp(s.size(), 0); ...原创 2022-03-09 10:47:30 · 446 阅读 · 0 评论 -
[LeetCode] 50 Pow(x,n) x的n次幂
50. Pow(x, n) - 力扣(LeetCode) (leetcode-cn.com)思路:快速幂递归方法:class Solution {private: double quickMul(double x, long long N) { if(N == 0) return 1.0; double y = quickMul(x, N/2); //先计算N一半次幂 return N % 2 == 0 ? y * y : y.原创 2022-03-08 21:26:36 · 145 阅读 · 0 评论 -
[LeetCode] 125 验证回文串
125. 验证回文串 - 力扣(LeetCode) (leetcode-cn.com)两个有用的函数:isalnum(); 判断字符是否为字母或数字,是则返回true,否则返回falsetolower(); 将大写字母字符转换为小写字母toupper(); 小写转大写题目思路:方法1:准备一个新字符串,其中存储的是修改后的原串(只保留字母和数字,且大小写统一),然后双指针遍历。方法2:直接在原串上遍历,每次比较前先让两个指针遍历...原创 2022-03-08 09:16:16 · 7546 阅读 · 0 评论 -
[LeetCode] 468 验证IP地址
468. 验证IP地址 - 力扣(LeetCode) (leetcode-cn.com)思路:最重要的是构建自己的split函数,按照某个符号进行分割,split函数定义如下: vector<string> split(string s, char c) { vector<string> ans; int l = 0; //寻找分割字符,已分割字符的位置作为子段的末尾位置进行分割 for(int r =原创 2022-03-07 15:39:42 · 196 阅读 · 0 评论 -
[LeetCode] 543 二叉树的直径
543. 二叉树的直径 - 力扣(LeetCode) (leetcode-cn.com)首先我们知道一条路径的长度为该路径经过的节点数减一,所以求直径(即求路径长度的最大值)等效于求路径经过节点数的最大值减一。而任意一条路径均可以被看作由某个节点为起点,从其左儿子和右儿子向下遍历的路径拼接得到。用递归来计算左右孩子向下遍历的深度。/** * Definition for a binary tree node. * struct TreeNode { * int val; *原创 2022-03-24 19:51:03 · 242 阅读 · 0 评论 -
常见排序:快排、堆排;快速选择
912. 排序数组 - 力扣(LeetCode) (leetcode-cn.com)快速排序原理:随机选取一个元素作为pivot,对其左右进行划分,并对新的到的部分重复上述操作。最后得到的就是有序数列。划分partition:对于左右边界分别为l和r的子数组,设置两个指针i和j,初始i=l-1,j=l。指针i和j维护一个子数组中的划分:i以及i左侧的元素均<=pivot;i+1至j的元素则均>pivot,j后的元素还未遍历。 对于i到j的子数组,首先随机选取一个元素作为主元pi原创 2022-03-03 21:02:25 · 561 阅读 · 0 评论 -
[LeetCode] 滑动窗口
3. 无重复字符的最长子串 - 力扣(LeetCode) (leetcode-cn.com)设置两个指针l,r。l和r分别指向子串的首尾元素。l从0开始且基于l进行for循环,r从-1开始且在for循环中利用while对r进行遍历。注意:l移动后说明l-1已经退出窗口了,因此要在set中清除l-1;while循环中遍历的实际上是r+1,这样当r+1为重复元素时,保存的r即为符合要求的窗口右边界class Solution {public: int lengthOfLongestSub原创 2022-03-03 14:48:02 · 244 阅读 · 0 评论 -
[LeetCode] 拓扑排序
(47条消息) 拓扑排序(Topological Sorting)_神奕的专栏-优快云博客_拓扑排序拓扑排序的原理如上。简单的来说就是:对于有向无环图DAG来说,图内无环才能有对应的拓扑排序。LeetCode207 课程表207. 课程表 - 力扣(LeetCode) (leetcode-cn.com)拓扑排序+DFS:class Solution {private: vector<vector<int>> edges; //edges[i]原创 2022-03-02 17:30:36 · 248 阅读 · 0 评论 -
[LeetCode] 486.预测赢家
好几种方法:记忆化递归、动态规划、极小化极大minmax动态规划方法:1.设计dp数组:dp[i][j]中i和j用于表示当前数组的范围,dp[i][j]存放的是两个玩家都想要取胜则两者的分数差值。2.状态转移:(i,j)由(i+1,j)和(i,j-1)推出,dp[i][j] = max( (nums[i] - dp[i+1][j]), (nums[j] - dp[i][j-1])).3.初始化:从最后一步考虑,当数组只有一个数值时,对应的那个玩家必须那这个数字,这一步对应i==j,因此初..原创 2022-03-02 11:44:46 · 153 阅读 · 0 评论 -
[LeetCode] 146.LRU缓存
题目思路:模拟LRU缓存的原理。需要实现的内容:实现一个LRUcache类,其中包括两个方法,get方法相当于调取元素,经过get后的元素要更新位置到最前面;put方法为放入新元素,如果之前缓存没有这个元素,则新建元素并放入(如果放入之前缓存已满,就要淘汰最近最久没用的元素,即最后面的元素),如果之前缓存中就有,那就相当于执行get方法。实现的方法:利用双向链表和哈希表。其中双向链表的头尾均设置哑节点,便于操作。双向链表结点的定义://双向链表节点struct DlinkedNode {原创 2022-03-01 16:08:01 · 270 阅读 · 0 评论 -
[LeetCode] 200岛屿数量(DFS BFS) + 695岛屿最大面积(DFS)
1.深度优先DFS:遍历二维数组时遇到1,则说明遇到一个岛,岛数+1,dfs遍历后岛置为0class Solution {private: //dfs结束后该岛屿已全部置为0 void dfs(vector<vector<char>>& grid, int r,int c) { //r c为开始遍历的1的坐标 int rn = grid.size(); //grid行数 int cn = grid[0].size();原创 2021-12-13 17:25:53 · 314 阅读 · 0 评论 -
[LeetCode] 买卖股票
先放一个题解合集:https://leetcode-cn.com/circle/article/qiAgHn/121题 买卖股票的最佳时机1.暴力思路:两层循环,遍历所有可能的收益,时间复杂度O(n²)。2.官方题解思路:在某一天能够获得的最大收益,自然是用这天的股票价格 减去 历史上股票的最低价格。因此设置变量minPrice来记录历史上最低价格,同时要注意交易必然发生在这个最低价格出现之后,所以循环中先更新最大收益值,再更新历史最低价格。class Solution {public:原创 2021-12-02 21:27:23 · 247 阅读 · 0 评论 -
Ant Design Vue 中使用 echarts
1.添加依赖yarn add echarts2.在vue项目的main.js中importimport * as echarts from 'echarts'Vue.prototype.$echarts = echarts3.在想要添加图表的页面中进行操作: methods: { drawChart() { // 基于准备好的dom,初始化echarts实例 let myChart = this.$echarts.init(document..原创 2021-11-16 19:38:48 · 3227 阅读 · 0 评论 -
yarn的源设置相关
1.查看当前的源yarn config get registry2.历史修改yarn源yarn save package_name --registry https://registry.npm.taobao.org/3.改用taobao源yarn config set registry https://registry.npm.taobao.org/4.改回官方源yarn config set registry https://registry.yarnpkg.c.原创 2021-11-12 10:45:50 · 1742 阅读 · 0 评论 -
[LeetCode] 566 重塑矩阵
思路:二维数组与一维数组的坐标对应二维数组:m行n列,其中某元素处于i行j列。将其映射于一维数组,则一维数组中的序号x = i * n + j。反过来,一维数组中序号为x的元素,在对应的m行n列二维数组中坐标应为i = x / n,j = x % n。...原创 2021-11-10 20:27:23 · 338 阅读 · 0 评论 -
Flutter报错:Execution failed for task ‘:app:compileFlutterBuildDebug‘
一个可能解决问题的方法:在terminal中:1) cd ./android2)gradlewclean原创 2021-10-14 09:35:11 · 8664 阅读 · 1 评论 -
数据库到前端年份多出1970年:mysql&js
问题:从后端取了十个日期(create_time),使用to_days化为天数排列如下:select to_days(date_format(create_time,'%Y-%m-%d')),count(id) from yqjd_news GROUP BY date_format(create_time,'%Y-%m-%d') ORDER BY create_time DESC limit 10;前端vue读到这些数据,再化为yyyy-mm-dd格式如下:moment(...原创 2021-09-28 15:30:09 · 394 阅读 · 0 评论 -
Spider-Flow使用记录
一、spider-flow简介&安装方法&快速入门简介 | spider-flow (spiderflow.org)安装部署 | spider-flow (spiderflow.org)快速入门 | spider-flow (spiderflow.org)二、selenium插件安装selenium | spider-flow (spiderflow.org)1.下载后解压,得到的文件夹直接移动到项目文件中2.在spider-flow/spider-flow-we原创 2021-08-25 17:21:49 · 6692 阅读 · 3 评论 -
Ant-Design-Vue 单击取消单选框radio选中效果
主要是通过当前对应的值来判断。例子:选项A、B分别对应值0、1,分别对两个单选框进行判断:如果当前值为0,即选中选项A,此时再点击选项A则将值置空;选项B同理。//<template><a-radio-group v-model="radioData"> <a-radio-button :value="0" @click="A">是</a-radio-button> <a-radio-button :value="1" @...原创 2021-07-21 08:58:41 · 5494 阅读 · 2 评论 -
[Leetcode] 65 有效数字 / C++正则表达式使用
题目:参考评论中的正则解法:class Solution {public: //正则表达式解法 static const regex pattern; bool isNumber(string s) { return regex_match(s,pattern); }};//正则表达式作为类的静态变量或全局变量,避免重复构造的开销const regex Solution::pattern("[+-]?(\\d+\\.\\d+|\原创 2021-06-17 11:37:55 · 215 阅读 · 0 评论 -
Git与Github操作
git初始化git config --global user.name ‘用户名’git config --global user.email ‘邮箱’建库及本地仓库操作新建一个作为本地仓库的文件夹,在其中进行操作。git init #初始化为仓库对新增/修改过的文件:git add 文件名 #添加到暂存区 git commit -m '提交描述' #提交到仓库删除文件:rm -rf 文件名git rm 文件名git commit -m '对删除的描原创 2021-06-10 16:26:28 · 110 阅读 · 0 评论 -
复试机试算法总结#10:图论
1. 图的存储1.1 邻接矩阵用一个二维矩阵表示图的信息,其中每一个单元都表示一对顶点间的邻接关系。对于无权图,单元的值用1或0表示两点间有无边;对于带权图,单元的值表示权值。不存在的边,单元值取无穷大;有向图的表示同理。适用于:稠密图、频繁判断特定顶点对是否相邻1.2 邻接表用动态分配的链表来替代静态分配的空间,依次提升效率。为每个结点建立一个单链表,保存与该结点相邻的所有结...原创 2020-04-20 11:36:45 · 212 阅读 · 0 评论 -
复试机试算法总结#7:递归与分治
1. 递归原创 2020-03-23 20:05:05 · 124 阅读 · 0 评论 -
复试机试算法总结#6:贪心
1. 简单贪心原创 2020-03-23 18:19:22 · 258 阅读 · 0 评论 -
复试机试算法总结#5:数学问题
1.进制转换对于不大的输入,可以借助向量,模一次存一次整除一次,倒序输出即可;而对于过长位数的输入,则应使用字符串来模拟数字的模运算和整除运算1.1十进制->二进制->十进制https://www.nowcoder.com/practice/fd972d5d5cf04dd4bb4e5f027d4fc11e?tpId=40&tqId=21357&tPage=1...原创 2020-03-22 17:06:28 · 231 阅读 · 0 评论 -
复试机试算法总结#4:数据结构1
1.向量头文件#include<vector>//定义vector<元素类型> 向量名;//状态判空 .empty()返回向量元素个数 .size()//尾部元素增删.push_back(x);.pop_back();//元素操作.insert(向量名.begin()+x,数目,待插入元素);//在指定位置插入数个元素.erase(向量名...原创 2020-04-16 13:10:11 · 163 阅读 · 0 评论 -
复试机试算法总结#2:排序与查找
1.排序使用algorithm头文件中的sort函数,本质为快速排序,默认升序排列。想要进行降序排列或根据某个数值类型进行排列,可以使用自定义的结构体+自定义的比较函数//想对学生成绩进行降序排列 struct Student{ int number; int score;};Student s[MAXN];bool cmp(Student s1,Student s2)...原创 2020-04-03 17:10:21 · 167 阅读 · 0 评论