- 博客(57)
- 资源 (1)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 5.19 华为算法笔试经验
华为机试一共三道题,对应的分值分别为100分、200分、300分。下面介绍这次笔试题目第一题一共有N个员工围成一个圆圈,分别是1,2,…,N每一个员工身上有对应数量的令牌,轮流从顺时针以及逆时针进行报数,顺时针报数周期为R,逆时针报数周期为L。顺时针从1开始报数,逆时针开始从N开始报数,被报到的员工K阵亡,并将令牌给下一个人(顺时针给K+1,逆时针给K-1,如果不存在的话,依次传递),游戏持续到只剩下M个人停止。其中,M=max(L,R)-1。例如,L=R=3,那么第一次报数到3号,3号阵亡,将令牌给4
2021-05-22 16:15:12
1418
4
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 完美解决 git Unable to access ‘https://github.com/xxxx/xxxx.git/’:OpenSSL SSL_read:Connection was reset
方法一: 切换网络,由于刚开始使用的校园网,导致GitHub无法连接,后面采用手机热点连接,即可解决此问题。毕竟切换网络不需要更改配置那些复杂的操作。方法二: 采用网上提到较多的修改git配置的方案,具体命令是 git config --global http.sslVerify false;(注意false 的拼写,以及一定不要带双引号)...
2021-05-17 20:10:34
29816
21
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 论文索引网址
https://link.springer.com/https://www.sciencedirect.com学术论文检索下载学术搜索引擎 谷歌学术(不会翻墙或者只有引用不能下载pdf的可以用http://tool.yovisun.com/scihub/) https://www.semanticscholar.org/ 必应学术或百度学术 图书网站:https:/...
2019-12-08 19:40:39
384
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 c++中长整型和基本整型数的区别
由于C++标准中并未指定int、long、long long等具体的字节数(只规定int不少于16位,long不少于32位,longlong不少于64位,并且sizeof(int) <= sizeof(long) <= sizeof(long long)),所以不同开发环境中的三者所占用位数可能不一致,具体的占用位数还得看实际的编译器实现。一般来说: 32位系统下:int-...
2019-03-03 10:16:40
10573
2
原创 【Leetcode】421. 数组中两个数的最大异或值
题目:421题意:给你一个整数数组 nums ,返回 nums[i] XOR nums[j]的最大运算结果,其中 0 ≤ i ≤ j < n 。题解:核心思想: 在位运算异或运算符中,x = ai⊕ aj 等价于 ai= x ⊕ aj ,由于数的范围在0~231-1范围内,所以每一次从二进制的角度选取最大的x。方法一: 哈希表,具体而言,保存数组中每一个数的前k位,从第30位开始,每一次选取数组中是否存在使得当前x可以满足的解;详细思路可以看代码进行理解。class Solution {p
2021-05-16 11:45:28
152
原创 滑动窗口算法框架
/* 滑动窗口算法框架 */void slidingWindow(string s, string t) { unordered_map<char, int> need, window; for (char c : t) need[c]++; int left = 0, right = 0; int valid = 0; while (right < s.size()) { // c 是将移入窗口的字符 cha.
2021-03-06 19:46:16
123
原创 二分搜索框架
int binary_search(int[] nums, int target) { int left = 0, right = nums.length - 1; while(left <= right) { int mid = left + (right - left) / 2; if (nums[mid] < target) { left = mid + 1; } else if (nums[mid.
2021-03-06 10:44:16
107
原创 回溯算法解题套路框架
1、路径:也就是已经做出的选择2、选择列表:也就是你当前可以做的选择3、结束条件:也就是到达决策树底层,无法再做选择的条件result = []def backtrack(路径, 选择列表): if 满足结束条件: result.add(路径) return for 选择 in 选择列表: 做选择 backtrack(路径, 选择列表) 撤销选择...
2021-03-05 16:55:03
83
原创 动态规划解题思路
1、确定base case2、确定状态,也就是原问题和子问题中会变化的量3、确定选择,也就是导致状态发生变化的行为4、明确DP数组的定义
2021-03-05 16:37:43
75
原创 数组和链表的特性以及优缺点
数组:连续存储空间,便于随机访问,通过索引可以快速找到对应元素,而且相对可以节约存储空间,但是正是因为连续存储,所以内存必须一次性分配够,所以如果数组想要扩容,就必须重新申请一块新的内存空间,然后将现有的数据全部复制过去,时间复杂度为 O(n) ;而且如果你想在中间插入或者删除元素的话,每一次都需要搬动后面的元素,所以时间复杂度都为 O(n)。链表:元素不连续,通过指针访问下一个元素,所以不存在数组的扩容问题,如果知道某一元素的前驱和后继指针,操作指针就可以删除当前元素,时间复杂度O(1) 。但是因为.
2021-03-05 16:34:40
485
1
原创 【Leetcode】330. 按要求补齐数组
题目:330题意:给定一个已排序的正整数数组 nums,和一个正整数n 。从[1, n]区间内选取任意个数字补充到nums中,使得[1, n]区间内的任何数字都可以用nums中某几个数字的和来表示。请输出满足上述要求的最少需要补充的数字个数。题解:贪心算法主要思想,对于任意x,如果 [1, x) 内所有数字都被覆盖,而且 z 在数组nums中,那么对于任意 1 <= y < x ,则y+z 也被覆盖。那么如果z小于x则 [z ,x+z)中的所有数字将被覆盖c...
2020-12-29 17:19:06
76
原创 【Leetcode】47. 全排列 II
题目:47题意:给定一个含有重复元素的数组,求出这个数组的全排列,并且使得任意排列不重复题解:回溯主体思想,和原题目46全排列类似,使用回溯算法,主要考虑两个子过程:递归出口:n(已经选择的数组中的元素个数) == len(数组长度)当已经选择的数组中的元素中的个数等于数组的大小就得到了一个排列 递归过程:n < len 如何选择下一个元素,下一个元素不能是之前已经选择过的,所以我们采用一个标记数组,标记数组中已经访问过的元素。目前这个过程和46题还是完全一致的,得到的结果会包含大
2020-12-22 21:02:46
82
原创 二维数组作为函数参数如何传递(C++)
首先,我们要明白,C++语言里面是没有二维数组,内存寻址都是当做一维数组处理的,下面介绍两种方法二维数组指针 voidfuntion_name(int(*a)[10],intm,intn);//注意使用括号 或者 voidfuntion_name(inta[][10],intm,intn); 二维数组的引用 voidfuntion_name(int(&a)[5][10],intm,intn);//与指针形式不同int(&a)[10]代表一维...
2020-12-21 21:18:23
316
原创 【Leetcode】46. 全排列
题目:46题意:给定一个无重复数字的数组序列,求出这个数组所有可能的排列情况题解:回溯法由题意可以看出,题目的本质需要求出这个数组的全排列,自然而然我们想到了穷举出所有的可能,即依次从数组中挑选出来一个元素组成新序列,我们使用回溯法来模拟这个过程。回溯法需要考虑以下两个方面:递归出口:当我们已经选择的个数 n 等于 len (数组的长度)时即得到了一个序列 递归过程:当 n < len 时,如何选择下一个元素,下一个元素不能是之前已经选择过的,所以我们采用一个标记数组,标记数组中
2020-12-21 21:10:42
72
原创 【Leetcode】416. 分割等和子集
题目:416题意:给定一个只包含正整数的非空数组。问是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。题解:动态规划dp[i][j]表示从数组的 [0, i] 这个子区间内挑选一些正整数,每个数只能用一次,使得这些数的和恰好等于j状态转移方程代码:class Solution {public: bool canPartition(vector<i...
2020-02-11 16:54:01
147
原创 【Leetcode】630. 课程表 III (优先队列)
题目:630题意:这里有 n 门不同的在线课程,他们按从 1 到 n编号。每一门课程有一定的持续上课时间(课程时间)t 以及关闭时间第 d天。一门课要持续学习 t 天直到第 d 天时要完成,你将会从第 1 天开始。给出 n 个在线课程用 (t, d) 对表示。你的任务是找出最多可以修几门课。题解:优先队列代码:class Solution {public: sta...
2020-02-11 16:04:25
255
原创 【Leetcode】621.任务调度(排序)
题目:621题意:给定一个用字符数组表示的 CPU 需要执行的任务列表。其中包含使用大写的 A - Z 字母表示的26 种不同种类的任务。任务可以以任意顺序执行,并且每个任务都可以在 1 个单位时间内执行完。CPU 在任何一个单位时间内都可以执行一个任务,或者在待命状态。然而,两个相同种类的任务之间必须有长度为n 的冷却时间,因此至少有连续 n 个单位时间内 CPU 在执行不同的任务,或...
2020-02-11 15:11:25
285
原创 【Leetcode】315.计算右侧小于当前元素的个数(归并排序)
题目:315题意:给定一个整数数组 nums,按要求返回一个新数组counts。数组 counts 有该性质: counts[i] 的值是nums[i] 右侧小于nums[i] 的元素的数量。题解:归并排序采用求逆序对的方式计数参考:参考资料代码:class Solution {private: vector<int> cnt; int* tem...
2020-02-10 19:15:05
259
原创 【Leetcode】307. 区域和检索(线段树)
题目:307题意:给定一个整数数组,可以随时对某一数组元素值进行修改,设计一个算法求任意范围内数值和题解:线段树线段树是一种非常灵活的数据结构,它可以用于解决多种范围查询问题,比如在对数时间内从数组中找到最小值、最大值、总和、最大公约数、最小公倍数等。线段树可以分为以下三个步骤:从给定数组构建线段树的预处理步骤。 修改元素时更新线段树。 使用线段树进行区域和检索。代码:...
2020-02-10 15:07:09
212
原创 【Leetcode】56. 合并区间(排序)
题目:56题意:给定一个区间集合,合并所有重叠的区间题解:先将区间集合排序后,逐一比较当前区间左端点与前一区间右端点,如果比前一区间右端点小,则可以合并代码:class Solution {public: //注意,cmp函数写在类里面,需要加static static bool cmp(vector<int> a, vector<int> b) ...
2020-02-07 17:02:42
266
原创 【Leetcode】1036. 逃离大迷宫
题目:1036题意:在一个 10^6 x 10^6 的网格中,每个网格块的坐标为(x, y),其中0 <= x, y < 10^6。我们从源方格source开始出发,意图赶往目标方格target。每次移动,我们都可以走到网格中在四个方向上相邻的方格,只要该方格不在给出的封锁列表blocked上。只有在可以通过一系列的移动到达目标方格时才返回true。否则,返回 fa...
2020-02-07 16:15:58
372
原创 【Leetcode】312. 戳气球(DP + 分治)
题目:312题意:有N个气球,要求你戳破所有的气球,每戳破一个,你可以获得nums[left]*nums[i]*nums[right]个硬币,注意戳破一个气球后相邻顺序会改变。求戳破所有气球所能获得的最大硬币数量题解:DP + 分治,主要是想分解为重叠子问题,但是如果简单考虑一下,先随机选择一个气球,然后求左右两边的两个子问题,但是左右两边并不是独立的子问题,即左边的顺序会影响右边的计...
2020-02-06 17:30:52
185
原创 【Leetcode】120. 三角形最小路径
题目:120题意:给定一个三角形,找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点上。题解:方法一:动态规划,使用O(n)的额外辅助空间,自顶向下,从后往前,需要考虑边界方法二:动态规划,使用O(n)的额外辅助空间,自底向上,从前往后,不需要考虑边界代码一:class Solution {public: int minimumTotal(vector<...
2020-02-05 16:09:27
75
原创 【Leetcode】51. N皇后 (回溯)
题目:51题意:求解N皇后问题的所有解思路:回溯,对于每一行必须且只能放置一个皇后,于是只需要考虑列即可。对于每一行,按列进行循环,检查当前位置是否可以放置皇后,如果可以就把攻击范围的方格打上标记。如果row == current_row,意味着得到了一个可能的方案,回溯寻找下一个可能的方案,直到所有的情况都考虑到。攻击范围:因为每一行放一个,所以不产生冲突,列的情况也比较好考...
2020-02-05 15:16:37
126
2
原创 POJ 3714 Raid(分治)
题目:3714题意:有两个点集,求两个点集任意两点最小的距离题解:将两个点集合并,采用分治法求平面点集距离 优化:分治左右两边求 mid-d ----- mid+d 之间的点,节省时间AC代码:#include<iostream>#include<algorithm>#include<math.h>#include<ioma...
2020-01-22 15:32:55
343
原创 POJ 1753 Flip Game(递归枚举)
题目:1753题意:有一个4*4的棋盘,棋盘上有黑白格,每一次你可以翻其中的一个格子。一个格子(x,y)如果被翻,它相邻的前后左右四个格子(如果在棋盘上)也要翻转。现在给你一个初始的棋盘状态,问把这个棋盘翻转到全黑或全白的最少次数;若不能达到全黑或全白,输出Impossible。题解:对于每一个格子,翻奇数任意次和翻一次没有区别,翻偶数任意次和翻0次没有区别,所有直接递归枚举所有的状态即可...
2020-01-22 12:03:42
206
原创 POJ 3233 Matrix Power Series(矩阵快速幂)
题目:3233题意:给出一个方阵,求幂级数和,并对M取余题解:采用矩阵快速幂,利用等比矩阵的性质AC代码:#include<iostream>using namespace std;#define MAXN 61int n, k, m;int A[MAXN][MAXN], B[MAXN][MAXN];void mult(int a[MAXN][MAXN]...
2020-01-21 15:40:01
296
原创 POJ 2366 Sacrament of the sum(哈希)
题目:2366题意:从两个有序列表中寻找是否存在两个数加和等于10000题解:哈希AC代码:#include<iostream>using namespace std;#define MAX 80000#define mid 40000#define target 10000int a[MAX] = {0};int main() { int n1, ...
2020-01-21 13:59:36
379
原创 POJ 1088 滑雪(拓扑排序)
题目:1088题意:求矩阵中的最长递减长度题解:拓扑排序(剥洋葱)AC代码:#include<iostream>#include<vector>using namespace std;#define MAX 100int cnt;int dir[4][2] = { {0,1}, {0,-1}, {1, 0}, {-1, 0} };int ma...
2020-01-21 13:23:11
160
原创 POJ 1636 Prison rearrangement(并查集 + 动态规划)
题目:POJ 1636题目大意:两个监狱交换等数量的犯人(不超过一半),有的犯人不能在一个监狱,求最大交换人数题解:用并查集求出有关系的人数,以数对的形式表示,然后转化为背包问题,用动态规划求解AC代码:#include<iostream>#include<string.h>using namespace std;#define MAX 410...
2020-01-21 12:16:48
800
原创 【Leetcode】37. 解数独
题目:解数独题意:给定一个9*9的不完全数独矩阵,需要在 ‘.’的地方填入合适的数字(1-9),使得每一行、每一列以及每一个子方块没有重复的数字出现思路:回溯 对每一行、每一列以及每一个子方块设置一个标志数组,标志已经存放过哪些数字。从矩阵的第一个格开始处理,直到最后一个格结束。代码:class Solution {private: int flag...
2019-12-20 16:49:12
96
原创 【Leetcode】218. 天际线问题
题目:天际线问题题意:给定n个矩形,求形成的轮廓解法一:分治,求解 n 栋楼的天际线:如果 n == 0:返回一个空列表如果 n == 1:返回一栋楼的天际线leftSkyline = 求解前 n/2 栋楼的天际线。rightSkyline = 求解后 n/2 栋楼的天际线。合并解法二:扫描线法使用扫描线,从左至右扫过。如果遇到左端点,将高度入堆,如果遇到右...
2019-11-28 19:08:12
358
原创 POJ 3579 Median
题意:给出一个数列,然后计算数列里各个数之间的差值的绝对值,形成一个新数列,求新 数列的中位数分析:第一种方法可以用upper_bound,功能是在一段单调递增的序列中找到第一个大于目标元素的地址。用处是可以统计小于或等于value的元素有多少个(所以要减1)。该函数使用二分快速查找,时间性能log n。思路是对于某个确定的d,通过枚举第一个元素的下标来统计以这个元素为首的数对有多少个是...
2019-11-24 21:26:36
76
原创 POJ 3269 Building A New Barn
题意: 已知 N 头牛的位置,问牛舍建在哪里,牛到牛舍的距离和最小以及可以取到最小值点的个数。分析:此题关键点:没有两个放牧点是相邻的曼哈顿距离公式:d=|x1−x2|+|y1−y2|,由于两点曼哈顿距离的特性,单独求 x 与单独求 y 互不影响因此,题目即为求 |x−x1|+|x−x2|+…+|x−xn| 的最小值,求 |y−y1|+|y−y2|+…+|y−yn| 的最小值...
2019-11-24 15:59:21
793
原创 POJ 1723 Soiders
题意:一些士兵站在矩阵的一些方格内,现要把他们移动到一横排,并连续地排成一队,问最少需要移动多少步。分析:货仓选址问题,相关证明可以浏览:https://www.cnblogs.com/LLTYYC/p/9537677.html货仓选址核心思想简短描述:对于一个数列,其各点到此数列的中位数处的距离之和是最短的。对于纵坐标,假设选取的基准点为,那么移到同一排的步数之和为,所以直接求...
2019-11-24 14:50:40
777
原创 【Leetcode】329. 矩阵中的最长递增路径
题目:矩阵中的最长递增路径给定一个整数矩阵,找出最长递增路径的长度。对于每个单元格,你可以往上,下,左,右四个方向移动。 你不能在对角线方向上移动或移动到边界外(即不允许环绕)。解法一:可以看作一种拓扑排序过程,通过计算拓扑序列的长度计算最长长度,即剥洋葱算法class Solution {public: int dir[4][2] = { {0, 1}, {0, -1}...
2019-11-14 21:16:24
140
原创 【Leetcode】5. 最长回文子串
题目:最长回文子串给定一个字符串 s,找到 s 中最长的回文子串。你可以假设s 的最大长度为 1000。解题思路:方法一:中心扩展法,枚举给定字符串的回文中心,从中心向外扩展,求最大回文串及其长度方法二:动态规划, 递归边界,长度为1和2的回文串的长度,dp[ i ][ i ] = 1; if s[ i ]==s[ i + 1],dp[ i ]...
2019-08-25 22:36:02
115
原创 【Leetcode】399. 除法求值
题目:evaluate division给出方程式 A / B = k, 其中 A 和 B 均为代表字符串的变量, k 是一个浮点型数字。根据已知方程式求解问题,并返回计算结果。如果结果不存在,则返回 -1.0。示例 :给定 a / b = 2.0, b / c = 3.0问题: a / c = ?, b / a = ?, a / e = ?, a / a = ?, x / x = ...
2019-08-20 17:11:24
153
recommend-CF-master.zip
2021-06-10
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人