- 博客(674)
- 收藏
- 关注
原创 141. 环形链表(快慢指针)
给定一个链表,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。如果链表中存在环,则返回 true 。 否则,返回 false 。进阶:你能用 O(1)(即,常量)内存解决此问题吗?示例 1:输入:head = [3,2,0,-4], po
2021-10-02 16:24:47
383
原创 136. 只出现一次的数字(异或)
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?示例 1:输入: [2,2,1]输出: 1示例 2:输入: [4,1,2,1,2]输出: 4来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/single-number著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。本题目的是去掉两个相同的,留下
2021-10-02 16:03:59
326
原创 121. 买卖股票的最佳时机(贪心)
给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。示例 1:输入:[7,1,5,3,6,4]输出:5解释:在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。注意利润不能是 7-1
2021-10-02 15:57:53
154
原创 104. 二叉树的最大深度(递归)
给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。示例:给定二叉树 [3,9,20,null,null,15,7],3/ 9 20/ 15 7返回它的最大深度 3 。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/maximum-depth-of-binary-tree著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。cla
2021-10-02 15:52:06
154
原创 101. 对称二叉树
给定一个二叉树,检查它是否是镜像对称的。例如,二叉树 [1,2,2,3,4,4,3] 是对称的。1/ 2 2/ \ / 3 4 4 3但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的:1/ 2 2\ 3 3来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/symmetric-tree著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。递归class Solut
2021-10-02 15:43:03
112
原创 94. 二叉树的中序遍历
给定一个二叉树的根节点 root ,返回它的 中序 遍历。示例 1:输入:root = [1,null,2,3]输出:[1,3,2]示例 2:输入:root = []输出:[]示例 3:输入:root = [1]输出:[1]示例 4:输入:root = [1,2]输出:[2,1]示例 5:输入:root = [1,null,2]输出:[1,2]提示:树中节点数目在范围 [0, 100] 内-100 <= Node.val <= 100来源:力扣(LeetCo
2021-10-01 12:24:46
113
原创 70. 爬楼梯(简单dp)
假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。示例 1:输入: 2输出: 2解释: 有两种方法可以爬到楼顶。1 阶 + 1 阶2 阶示例 2:输入: 3输出: 3解释: 有三种方法可以爬到楼顶。1 阶 + 1 阶 + 1 阶1 阶 + 2 阶2 阶 + 1 阶来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/clim
2021-10-01 11:08:56
141
原创 53. 最大子序和(动态规划,贪心)
给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例 1:输入:nums = [-2,1,-3,4,-1,2,1,-5,4]输出:6解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。示例 2:输入:nums = [1]输出:1示例 3:输入:nums = [0]输出:0示例 4:输入:nums = [-1]输出:-1示例 5:输入:nums = [-100000]输出:-100000提示:1 <= nu
2021-09-30 18:42:43
95
原创 21. 合并两个有序链表(链表,递归)
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例 1:输入:l1 = [1,2,4], l2 = [1,3,4]输出:[1,1,2,3,4,4]示例 2:输入:l1 = [], l2 = []输出:[]示例 3:输入:l1 = [], l2 = [0]输出:[0]提示:两个链表的节点数目范围是 [0, 50]-100 <= Node.val <= 100l1 和 l2 均按 非递减顺序 排列来源:力扣(LeetCod
2021-09-30 18:30:00
142
原创 20. 有效的括号(链表,模拟)
给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。示例 1:输入:s = “()”输出:true示例 2:输入:s = “()[]{}”输出:true示例 3:输入:s = “(]”输出:false示例 4:输入:s = “([)]”输出:false示例 5:输入:s = “{[]}”输出:true提示:1 <= s.length &
2021-09-30 18:15:22
127
原创 2. 两数相加(链表,模拟)
给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例 1:输入:l1 = [2,4,3], l2 = [5,6,4]输出:[7,0,8]解释:342 + 465 = 807.示例 2:输入:l1 = [0], l2 = [0]输出:[0]示例 3:输入:l1 = [9,9,9,9,9,9,9], l2 =
2021-04-12 22:32:29
119
原创 1. 两数之和(哈希优化,空间换时间)
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。示例 1:输入:nums = [2,7,11,15], target = 9输出:[0,1]解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。示例 2:输入:nums = [3,2,4], target = 6输出:[1,2
2021-04-12 22:11:44
108
原创 序列化二叉树(较难,队列,树)
题目描述请实现两个函数,分别用来序列化和反序列化二叉树二叉树的序列化是指:把一棵二叉树按照某种遍历方式的结果以某种格式保存为字符串,从而使得内存中建立起来的二叉树可以持久保存。序列化可以基于先序、中序、后序、层序的二叉树遍历方式来进行修改,序列化的结果是一个字符串,序列化时通过 某种符号表示空节点(#),以 ! 表示一个结点值的结束(value!)。二叉树的反序列化是指:根据某种遍历顺序得到的序列化字符串结果str,重构二叉树。例如,我们可以把一个只有根节点为1的二叉树序列化为"1,",然后通过自己
2021-04-08 23:19:43
302
原创 滑动窗口的最大值(较难,堆,双指针)
题目描述给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{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,[6,2,5],1}, {2,3,4,2,
2021-04-08 22:39:27
158
原创 删除链表中重复的结点(较难,链表)
题目描述在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5示例1输入{1,2,3,3,4,4,5}返回值{1,2,5}看了下别人的做法,发现这道题重复的节点都是连在一起的,不是随机分布的,所以直接比对相邻的就好class Solution {public: ListNode* deleteDuplication(L
2021-04-07 22:17:25
115
原创 字符串的排列(较难,字符串,动态规划)
题目描述输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则按字典序打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。输入描述:输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。示例1输入“ab”返回值[“ab”,“ba”]关键词:所有排列,解决方法:搜索,set存储来去重和排序pos:第几个字符固定搜索做法:每次交换两个字符class Solution {public: void
2021-04-07 21:59:01
209
原创 数组中的逆序对(困难,数组)
题目描述在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007对于50%50%的数据,size\leq 10^4size≤10 4对于75%75%的数据,size\leq 10^5size≤10 5对于100%100%的数据,size\leq 2*10^5size≤2∗10 5输入描述:题目保证输入的数组中没有的相同的数字示例1输入[1,2,3
2021-04-07 21:40:07
130
原创 正则表达式匹配(较难,字符串)
题目描述请实现一个函数用来匹配包括’.‘和’‘的正则表达式。模式中的字符’.‘表示任意一个字符,而’ * '表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"abaca"匹配,但是与"aa.a"和"aba"均不匹配示例1输入“aaa”,“a*a”返回值true设dp[i][j]:a的前i个字符是否和b的前j个字符匹配(初始为false,dp[0][0]=true)//字符是以0开头的b[j-1] !=’*
2021-04-06 23:18:30
249
原创 复杂链表的复制(较难,链表)
题目描述输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针random指向一个随机节点),请对此链表进行深拷贝,并返回拷贝后的头结点。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)说明:本题目包含复杂数据结构ListNode、RandomListNode,点此查看相关信息模拟,先用map创建对应的新节点,再赋值过去。/*struct RandomListNode { int label; struct RandomLis
2021-04-06 14:09:14
86
原创 二叉搜索树的后序遍历序列(较难,栈,树)
题目描述输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则返回true,否则返回false。假设输入的数组的任意两个数字都互不相同。(ps:我们约定空树不是二叉搜素树)示例1输入[4,8,6,12,16,14,10]返回值true基础知识:二叉搜索树:左子树的值<根结点的值<右子树的值后序遍历:左,右,中 最后一个结点是根结点从已知入手:从右到左访问数组,即从根到叶,从右到左(大->小)根节点的值是右子树的下限,左子树的上限分析:如果当前元
2021-04-06 10:56:56
147
原创 按之字形顺序打印二叉树(较难,栈,树)
题目描述请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。示例1输入{8,6,10,5,7,9,11}返回值[[8],[10,6],[5,7,9,11]]层次遍历用搜索,广搜比较方便。class Solution {public: vector<vector<int> > Print(TreeNode* pRoot) { vector<
2021-04-02 22:58:12
103
原创 丑数(较难,数学,二分)
题目描述把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。示例1输入7返回值8可以很轻易的知道每个丑数,都是由一个丑数乘2,乘3,乘5得来的。问题在于如何正确的进行排序。我们可以维持三个指针来记录当前乘以2、乘以3、乘以5的最小值。当其被选为新的最小值后,要把相应的指针+1。class Solution {public: int GetUglyNu
2021-04-02 22:41:38
81
原创 矩阵中的路径(中等,dfs)
题目描述请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。示例1输入复制[[a,b,c,e],[s,f,c,s],[a,d,e,e]],“abcced”返回值复制true示例2输入复制[[a,b,c,e],[s,f,c,s],[a,d,e,e]],“abcb”返回值复制false在所有路径中找到一条
2021-04-01 21:59:48
105
原创 机器人的运动范围(较难,数组)
题目描述地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。但是,它不能进入方格(35,38),因为3+5+3+8 = 19。请问该机器人能够达到多少个格子?示例1输入5,10,10返回值21查找所有满足的格子就用搜索了需要注意的是标记数组要先赋值0,牛客的那个编译器好像不太一样,不赋值的话不知道会跑
2021-04-01 21:13:36
90
原创 对称的二叉树(困难,树)
题目描述请实现一个函数,用来判断一棵二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。示例1输入{8,6,6,5,7,7,5}返回值true示例2输入{8,6,9,5,7,7,5}返回值false即树的每个节点的左子树要和右子树相等,用深搜class Solution {public: bool judge(TreeNode* x, TreeNode* y) { if(x==NULL&&y==NULL
2021-04-01 20:51:38
75
原创 翻转单词顺序列(较难,字符串)
题目描述牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?示例1输入“nowcoder. a am I”返回值“I am a nowcoder.”后进先出用栈class Soluti
2021-04-01 20:38:51
70
原创 把字符串转换成整数(较难,字符串,数学)
题目描述将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0输入描述:输入一个字符串,包括数字字母符号,可以为空返回值描述:如果是合法的数值表达则返回该数字,否则返回0示例1输入“+2147483647”返回值复制2147483647示例2输入“1a33”返回值0模拟一下class Solution {public: int StrToInt(string str) { int ans=0
2021-03-31 23:43:08
106
原创 把数组排成最小的数(较难,数组)
题目描述输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。示例1输入[3,32,321]返回值“321323”思路1:先随便来几个数比对1: 1,2,32: 23,323: 32,31,3选择的优选顺序自然是1: 1>2>32: 23>323. 31>32>3可以很轻松想到使用贪心,贪心的原则就是从前往后比对,找数小的
2021-03-31 23:33:05
146
原创 二叉树中和为某一值的路径(较难,树)
题目描述输入一颗二叉树的根节点和一个整数,按字典序打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。示例1输入{10,5,12,4,7},22返回值[[10,5,7],[10,12]]示例2输入{10,5,12,4,7},15返回值[]通常这种要找到满足条件的所有路径,就是采用回溯的方法。且应该用深搜而不是广搜。回溯的代码编写主要注意好 结束边界,搜索条件,搜索方式等就好,多做几道题都会是类似套路。/*struct
2021-03-31 22:39:24
71
原创 从上往下打印二叉树(困难,队列,树)
题目描述从上往下打印出二叉树的每个节点,同层节点从左至右打印。示例1输入复制{5,4,#,3,#,2,#,1}返回值复制[5,4,3,2,1]按头结点,左节点,右节点的顺序进行广搜/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { }};*/class Soluti
2021-03-25 16:39:56
69
原创 包含min函数的栈(较难,栈)
题目描述定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。开一个辅助栈,存当前最小class Solution {public: stack<int>a,b; void push(int value) { a.push(value); if(b.empty()) b.push(value); else { if(value<=b
2021-03-24 16:13:40
81
原创 二维数组中的查找(较难,数组)
题目描述在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。示例1输入复制7,[[1,2,8,9],[2,4,9,12],[4,7,10,13],[6,8,11,15]]返回值复制true我们把起点定在数组的最右上的那个数,会发现比他小的都在它左边,比他大的都在它下面class Solution {public: bool Find(int
2021-03-24 16:08:52
94
原创 M Zipline(勾股定理+三分)
链接:https://ac.nowcoder.com/acm/contest/13168/M来源:牛客网题目描述A zipline is a very fun and fast method of travel. It uses a very strong steel cable, connected to two poles. A rider (which could be a person or some cargo) attaches to a pulley which travels on t
2021-03-21 23:23:34
392
原创 D Missing Numbers(模拟)
链接:https://ac.nowcoder.com/acm/contest/13168/D来源:牛客网题目描述You enjoy your new job as a teacher of young children. It’s fun to see them learning to count, recognize letters, draw, and interact with the world.One common problem you’ve noticed is that childr
2021-03-21 23:09:52
101
原创 C Gerrymandering(读题)
链接:https://ac.nowcoder.com/acm/contest/13168/C来源:牛客网示例1输入复制5 31 100 2002 100 993 100 503 100 502 100 98输出复制B 100 49A 1 197A 49 1000.1965897693示例2输入复制4 43 100 992 100 991 100 994 100 99输出复制A 0 99A 0 99A 0 99A 0 990.4974874372
2021-03-21 23:08:49
229
原创 A Circuit Math(模拟)
链接:https://ac.nowcoder.com/acm/contest/13168/A来源:牛客网题目描述You are enrolled in the Computer Organization and Architecture course at your university. You decide to write a program to help check your work by computing the output value of a combinational digi
2021-03-21 22:57:30
232
原创 bitmap(大数据怎么存到小内存里)
参考资料思路:很简单,就是设一个数组,初始全为0,有数的地方就置1比如:给你1,5,7。就设一个长度为8的数组。a[1]=1.a[5]=1,a[7]=1;修改:增:按位或(相同为0,不同为1)比如要放入1个数4,就先计算1<<4 变成 10000然后与原先数组按位或删:取反后相与(有0则为0)比如要删去1个数4,就先计算1<<4 变成 10000然后取反,变成01111(前面的数这里省去不写)然后与原先数组按位或扩展:找出不重复的整数的个数原先是:每个数
2021-03-17 15:51:48
446
原创 哈希冲突的解决方案
哈希表:将输入的数据存放在其经过哈希函数后得到的位置上哈希函数:就是一个数学变化,将输入的值经过某种变化后变成另一个数hash : 翻译为“散列”,就是把任意长度的输入,通过散列算法,变成固定长度的输出,该输出就是散列值。hash冲突:无论再怎么变化,输入空间和输出空间都是一定的,只要输入的空间一大于输出的空间,就一定会出现两个不同的输入指向同一个输出值的情况,这就是哈希冲突解决方法1、开放地址法:在原地址上用一个确定的增量不断探查,直到有空位置(1)线性探测按顺序决定值时,如果某数据的值已
2021-03-17 00:08:20
233
原创 进程调度
进程的基本状态:(1)运行:已经获得必要的资源 ,占用处理机。处理机正在执行该进程(2)就绪:进程等待分配CPU。(3)阻塞:等待某个事件。进程调度非剥夺方式: 分派程序一旦把处理机分配给某进程后便让它一直运行下去,直到进程完成或发生某事件而阻塞时,才把处理机分配给另一个进程。剥夺方式: 当一个进程正在运行时,系统可以基于某种原则,剥夺已分配给它的处理机,将之分配给其它进程。剥夺原则有:优先权原则、短进程优先原则、时间片原则。进程调度算法:1、先进先出算法(FIFO):先来的先服
2021-03-16 23:27:28
120
原创 C++的编译过程,预处理指令
C++的编译过程1)编译 :把源代码翻译成机器语言,形成目标文件1.1)先进行编译预处理预处理又称为预编译,是做些代码文本替换工作。编译器执行预处理指令(以#开头,例如#include)替换成其包含的文件代码。这个过程会得到不包含#指令的.i文件。1.2)编译优化这阶段要做的工作主要是,通过语法分析和词法分析,确定所有指令是否符合规则,之后翻译成汇编代码。这个过程将.i文件转化位.s文件。1.3) 汇编把汇编语言翻译成目标机器指令的过程,生成目标文件(.obj .o等)。目标文件中存放
2021-03-16 22:49:51
356
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人