- 博客(60)
- 收藏
- 关注
原创 560. 和为K的子数组
560. 和为K的子数组 给定一个整数数组和一个整数 k,你需要找到该数组中和为 k 的连续的子数组的个数。 示例 1 : 输入:nums = [1,1,1], k = 2 输出: 2 , [1,1] 与 [1,1] 为两种不同的情况。 说明 : 数组的长度为 [1, 20,000]。 数组中元素的范围是 [-1000, 1000] ,且整数 k 的范围是 [-1e7, 1e7]。 class Solution { public: int subarraySum(vector<int>&
2020-09-13 00:20:23
177
原创 1104. 二叉树寻路
1104. 二叉树寻路 在一棵无限的二叉树上,每个节点都有两个子节点,树中的节点 逐行 依次按 “之” 字形进行标记。 如下图所示,在奇数行(即,第一行、第三行、第五行……)中,按从左到右的顺序进行标记; 而偶数行(即,第二行、第四行、第六行……)中,按从右到左的顺序进行标记。 给你树上某一个节点的标号 label,请你返回从根节点到该标号为 label 节点的路径,该路径是由途经的节点标号所组成的。 示例 1: 输入:label = 14 输出:[1,3,4,14] 示例 2: 输入:label = 26
2020-09-10 02:23:32
171
原创 剑指offer快点刷快点刷快点刷
01 二维数组的查找 有序二维数组,将右上角看作是二叉搜索树的根节点。 02 替换空格 str,resize(n),从尾部开始遍历,遇到空格填充“%20”。 03 从尾到头打印链表 ①存入数组,数组反转。 ②栈。 04 用两个栈实现一个队列 栈2进栈1出,栈1出的数据从栈2中pop ...
2020-09-03 01:50:33
181
原创 328. 奇偶链表
奇偶链表 给定一个单链表,把所有的奇数节点和偶数节点分别排在一起。请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性。 请尝试使用原地算法完成。你的算法的空间复杂度应为 O(1),时间复杂度应为 O(nodes),nodes 为节点总数。 示例 1: 输入: 1->2->3->4->5->NULL 输出: 1->3->5->2->4->NULL 示例 2: 输入: 2->1->3->5->6-.
2020-08-29 01:50:11
258
原创 剑指 Offer 46. 把数字翻译成字符串
剑指 Offer 46. 把数字翻译成字符串 给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 “a” ,1 翻译成 “b”,……,11 翻译成 “l”,……,25 翻译成 “z”。一个数字可能有多个翻译。请编程实现一个函数,用来计算一个数字有多少种不同的翻译方法。 示例 1: 输入: 12258 输出: 5 解释: 12258有5种不同的翻译,分别是"bccfi", “bwfi”, “bczi”, “mcfi"和"mzi” //dp[i] 表示长度为i的数字num的翻译方法数 //dp[i] =
2020-08-29 01:34:27
126
原创 453. 最小移动次数使数组元素相等
最小移动次数使数组元素相等 给定一个长度为 n 的非空整数数组,找到让数组所有元素相等的最小移动次数。每次移动将会使 n - 1 个元素增加 1。 示例: 输入: [1,2,3] 输出: 3 解释: 只需要3次移动(注意每次移动会增加两个元素的值): [1,2,3] => [2,3,3] => [3,4,3] => [4,4,4] 解:让n-1个元素增加1 等价于 使1个元素减1。 class Solution { public: int minMoves(vect.
2020-08-28 01:02:25
95
原创 20. 有效的括号
20. 有效的括号 给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 注意空字符串可被认为是有效字符串。 示例 1: 输入: “()” 输出: true 示例 2: 输入: “()[]{}” 输出: true 示例 3: 输入: “(]” 输出: false 示例 4: 输入: “([)]” 输出: false 示例 5: 输入: “{[]}” 输出: true 解: 栈实现。
2020-08-24 01:50:56
119
原创 leetcode-1496. 判断路径是否相交
1496. 判断路径是否相交 给你一个字符串 path,其中 path[i] 的值可以是 ‘N’、‘S’、‘E’ 或者 ‘W’,分别表示向北、向南、向东、向西移动一个单位。 机器人从二维平面上的原点 (0, 0) 处开始出发,按 path 所指示的路径行走。 如果路径在任何位置上出现相交的情况,也就是走到之前已经走过的位置,请返回 True ;否则,返回 False 。 提示: 1 <= path.length <= 10^4 path 仅由 {‘N’, ‘S’, ‘E’, 'W} 中的字符组成
2020-08-24 01:30:19
166
原创 leetcode-172. 阶乘后的零
172. 阶乘后的零 给定一个整数 n,返回 n! 结果尾数中零的数量。 示例 1: 输入: 3 输出: 0 解释: 3! = 6, 尾数中没有零。 示例 2: 输入: 5 输出: 1 解释: 5! = 120, 尾数中有 1 个零. 说明: 你算法的时间复杂度应为 O(log n) (1)结尾为0->整除10->整除最小因子:一对2和5->5的数量比2多->只计算因子5的个数 (2)51 52 5*3 …… = 5 10 15 ……,所以5的个数为n/5 (3)但!对于25 125
2020-08-24 00:34:15
130
原创 剑指 Offer 60. n个骰子的点数(动态规划)
剑指 Offer 60. n个骰子的点数 题目描述: 把n个骰子扔在地上,所有骰子朝上一面的点数之和为s。输入n,打印出s的所有可能的值出现的概率。 你需要用一个浮点数数组返回答案,其中第 i 个元素代表这 n 个骰子所能掷出的点数集合中第 i 小的那个的概率。 示例 1: 输入: 1 输出: [0.16667,0.16667,0.16667,0.16667,0.16667,0.16667] 示例 2: 输入: 2 输出: [0.02778,0.05556,0.08333,0.11111,0.13889,0
2020-08-23 01:52:04
161
原创 剑指 Offer 44. 数字序列中某一位的数字
剑指 Offer 44. 数字序列中某一位的数字 数字以0123456789101112131415…的格式序列化到一个字符序列中。在这个序列中,第5位(从下标0开始计数)是5,第13位是1,第19位是4,等等。 请写一个函数,求任意第n位对应的数字。 示例 1: 输入:n = 3 输出:3 示例 2: 输入:n = 11 输出:0 限制: 0 <= n < 2^31 解: /* 范围 digit 范围内位数 0~9 1 10 10~99 2
2020-08-21 01:52:31
134
原创 剑指 Offer 19. 正则表达式匹配(动态规划)
剑指 Offer 19. 正则表达式匹配 请实现一个函数用来匹配包含’. ‘和’‘的正则表达式。模式中的字符’.‘表示任意一个字符,而’'表示它前面的字符可以出现任意次(含0次)。在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"abaca"匹配,但与"aa.a"和"ab*a"均不匹配。 示例 1: 输入: s = “aa” p = “a” 输出: false 解释: “a” 无法匹配 “aa” 整个字符串。 示例 2: 输入: s = “aa” p = “a*” 输
2020-08-20 23:17:14
261
原创 剑指 Offer 36. 二叉搜索树与双向链表
剑指 Offer 36. 二叉搜索树与双向链表 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的循环双向链表。要求不能创建任何新的节点,只能调整树中节点指针的指向。 为了让您更好地理解问题,以下面的二叉搜索树为例: 我们希望将这个二叉搜索树转化为双向循环链表。链表中的每个节点都有一个前驱和后继指针。对于双向循环链表,第一个节点的前驱是最后一个节点,最后一个节点的后继是第一个节点。 下图展示了上面的二叉搜索树转化成的链表。“head” 表示指向链表中有最小元素的节点。 特别地,我们希望可以就地完成转换操作
2020-08-19 21:48:27
117
原创 剑指 Offer 62. 圆圈中最后剩下的数字(约瑟夫环)
剑指 Offer 62. 圆圈中最后剩下的数字 0,1,n-1这n个数字排成一个圆圈,从数字0开始,每次从这个圆圈里删除第m个数字。求出这个圆圈里剩下的最后一个数字。 例如,0、1、2、3、4这5个数字组成一个圆圈,从数字0开始每次删除第3个数字,则删除的前4个数字依次是2、0、4、1,因此最后剩下的数字是3。 示例 1: 输入: n = 5, m = 3 输出: 3 示例 2: 输入: n = 10, m = 17 输出: 2 限制: 1 <= n <= 10^5 1 <= m <
2020-08-19 21:41:42
130
原创 剑指 Offer 33. 二叉搜索树的后序遍历序列
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果。如果是则返回 true,否则返回 false。假设输入的数组的任意两个数字都互不相同。 参考以下这颗二叉搜索树: 5 / 2 6 / 1 3 示例 1: 输入: [1,6,3,2,5] 输出: false 示例 2: 输入: [1,3,2,6,5] 输出: true 提示: 数组长度 <= 1000 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/er-cha-sou-su
2020-08-18 00:47:36
128
原创 牛客OJ在线编程常见输入输出练习场
#include stringstream ss; getline(input,numstr,delim) #include<iostream> #include<vector> #include<algorithm> #include<sstream> using namespace std; int main() { vector<string> v; string s; while(cin>>s)
2020-08-17 22:10:15
488
原创 剑指 Offer 61. 扑克牌中的顺子
从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的。2~10为数字本身,A为1,J为11,Q为12,K为13,而大、小王为 0 ,可以看成任意数字。A 不能视为 14。 示例 1: 输入: [1,2,3,4,5] 输出: True 示例 2: 输入: [0,0,1,2,5] 输出: True 限制: 数组长度为 5 数组的数取值为 [0, 13] . //用0填充 //先排序,判断零的个数,再计算各个数之间的差值,不满足顺子的看是否能用0填充 /*class Solution { publi
2020-08-17 19:52:25
113
原创 剑指 Offer 38. 字符串的排列(回溯算法)
剑指 Offer 38. 字符串的排列 输入一个字符串,打印出该字符串中字符的所有排列。 按照字典序返回这个字符串数组,但里面不能有重复元素。 示例: 输入:s = “abc” 输出:[“abc”,“acb”,“bac”,“bca”,“cab”,“cba”] 限制: 1 <= s 的长度 <= 8 思路: 字符串全排列:第一个位置n种方法,第二个位置n-1种,…… 实现: void dfs(int x) 参数:x为字符串第x个位置 功能:完成第x个位置元素的选择,递归:dfs(x+1) 终止条件
2020-08-16 01:13:08
164
原创 剑指 Offer 31. 栈的压入、弹出序列
剑指 Offer 31. 栈的压入、弹出序列 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如,序列 {1,2,3,4,5} 是某栈的压栈序列,序列 {4,5,3,2,1} 是该压栈序列对应的一个弹出序列,但 {4,3,5,1,2} 就不可能是该压栈序列的弹出序列。 示例 1: 输入:pushed = [1,2,3,4,5], popped = [4,5,3,2,1] 输出:true 解释:我们可以按以下顺序执行: push(1), pu
2020-08-16 00:22:49
107
转载 cin,cin.get(),cin.getline()
(1)cin>> 根据后面变量的类型读取数据。 输入结束条件 :遇到Enter、Space、Tab键。 当cin>>从缓冲区中读取数据时,若缓冲区中第一个字符是空格、tab或换行这些分隔符时,cin>>会将其忽略并清除,继续读取下一个字符,若缓冲区为空,则继续等待;如果第一个字符读取成功,字符后面的分隔符是残留在缓冲区的,cin>>不做处理。 返回值:cin>>ch返回的是cin对象,可用while(cin>>ch)做
2020-08-13 01:50:40
304
原创 剑指 Offer 43. 1~n整数中1出现的次数
输入一个整数 n ,求1~n这n个整数的十进制表示中1出现的次数。 例如,输入12,1~12这些整数中包含1 的数字有1、10、11和12,1一共出现了5次。 示例 1: 输入:n = 12 输出:5 示例 2: 输入:n = 13 输出:6 限制: 1 <= n < 2^31 解: eg: 对于整数64012 思路:分别计算,0~64012,所有个位出现的1的次数 + 十位出现的1的次数 + …… 将一个数分为high cur low , 640 1 2,计算十位出现1的次数; 对于high∈
2020-08-07 01:40:09
98
原创 剑指 Offer 66. 构建乘积数组
剑指 Offer 66. 构建乘积数组 给定一个数组 A[0,1,…,n-1],请构建一个数组 B[0,1,…,n-1],其中 B 中的元素 B[i]=A[0]×A[1]×…×A[i-1]×A[i+1]×…×A[n-1]。不能使用除法。 示例: 输入: [1,2,3,4,5] 输出: [120,60,40,30,24] 提示: 所有元素乘积之和不会溢出 32 位整数 a.length <= 100000 解: 难点:不能使用除法 对称遍历, 从左往右得到数组B[i] = A[0]×A[1]×…×A[i
2020-08-01 01:37:10
88
原创 二分查找
输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。如果有多对数字的和等于s,则输出任意一对即可。 示例 1: 输入:nums = [2,7,11,15], target = 9 输出:[2,7] 或者 [7,2] 示例 2: 输入:nums = [10,26,30,31,47,60], target = 40 输出:[10,30] 或者 [30,10] 限制: 1 <= nums.length <= 10^5 1 <= nums[i] <= 10^6 解:
2020-07-31 02:29:19
90
原创 有符号数与补码
对于unsigned int,其数据范围为[0,2^32 - 1]。 补码和原码都是对于有符号数而言的。 对于int, [0,2^31 - 1]为正数, [-2^31,-1]为负数。 对于负数-x来说,补码表示实际上为2^n - x,其中n为该数的位数,则-x与x相加刚好为0。 那么我们注意到,对于x∈[0,2^31 - 1],32位表示,则最大的数2^31 - 1,其最高位为0(小于该数的也是如此),其余位为1,故最高位为0,则判断为正数。 对于[-231,-1],32位表示,则最大的数-1,补码表
2020-07-24 01:37:34
1803
原创 剑指 Offer 45. 把数组排成最小的数
题目描述: 输入一个非负整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。 示例 1: 输入: [10,2] 输出: “102” 示例 2: 输入: [3,30,34,5,9] 输出: “3033459” 解: string to_string(int); //数字转字符数字函数 按照字符串比较大小规则,对string数组进行排序(更小的数在更高位,则整体数更小) 具体规则:数字s1+s2 < s2 + s1,则s1“小于”s2。 class Solution { pu
2020-07-23 01:14:26
117
原创 剑指 Offer 40. 最小的k个数(快排)
输入整数数组 arr ,找出其中最小的 k 个数。例如,输入4、5、1、6、2、7、3、8这8个数字,则最小的4个数字是1、2、3、4。 示例 1: 输入:arr = [3,2,1], k = 2 输出:[1,2] 或者 [2,1] 示例 2: 输入:arr = [0,1,2,1], k = 1 输出:[0] 解: ①堆排序,priority_queue优先队列结构(C++默认大根堆)(也可以自己写实现) ②快排->返回数组无排序要求->快速选择 ...
2020-07-21 23:46:34
99
原创 剑指 Offer 21. 调整数组顺序使奇数位于偶数前面
题目描述: 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。 示例: 输入:nums = [1,2,3,4] 输出:[1,3,2,4] 注:[3,1,2,4] 也是正确的答案之一。 解: (1)双端指针 (2)快慢指针(类似快排的调整数组) class Solution { public: vector<int> exchange(vector<int>& nums) { //快慢指
2020-07-20 01:50:47
68
原创 剑指 Offer 25. 合并两个排序的链表
输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。 示例1: 输入:1->2->4, 1->3->4 输出:1->1->2->3->4->4 限制: 0 <= 链表长度 <= 1000 解: 原地修改:双指针各指一个原链表,比较大小,添加较小节点至合并链表,双指针交替前进。 时间复杂度O(m+n),空间复杂度O(1)。 class Solution { public: ListNode* mergeTwoLis
2020-07-15 23:28:12
74
原创 剑指 Offer 59 - I. 滑动窗口的最大值
剑指 Offer 59 - I. 滑动窗口的最大值 给定一个数组 nums 和滑动窗口的大小 k,请找出所有滑动窗口里的最大值。 示例: 输入: nums = [1,3,-1,-3,5,3,6,7], 和 k = 3 输出: [3,3,5,5,6,7] 解释: 滑动窗口的位置 最大值 [1 3 -1] -3 5 3 6 7 3 1 [3 -1 -3] 5 3 6 7 3 1 3 [-1 -3 5] 3 6 7
2020-07-10 01:43:20
131
原创 HTTP请求报文与响应报文小实验
1.windows10默认关闭telnet服务,在“启动或关闭windows功能”中打开telnet客服端功能。 2.在命令行中输入 telnet cis.poly.edu 80 (服务器域名和端口号)。输入回车后可以看到控制台窗口,但此时输入字符无法显示,按 CTRL + ]使其显示。 3.再按一下回车返回控制台窗口。 输入下面内容: GET /~ross/ HTTP/1.1 (初始状态行) Host: cis.poly.edu (首部行) 复制后右键可直接粘贴,输入完首部行后输入两个空格即发送。 4.状
2020-07-09 01:15:48
559
原创 剑指 Offer 39. 数组中出现次数超过一半的数字(摩尔投票)
剑指 Offer 39. 数组中出现次数超过一半的数字 题目描述: 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。 你可以假设数组是非空的,并且给定的数组总是存在多数元素。 示例 1: 输入: [1, 2, 3, 2, 2, 2, 5, 4, 2] 输出: 2 //遍历数组 hash表以数值大小为key值,存出现次数 //排序,取中位数 //摩尔投票法 class Solution { public: int majorityElement(vector<int>&
2020-07-09 01:13:18
114
原创 位运算
题目描述:求 1+2+…+n ,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。 常见思路:等差数列(不能使用乘除,pass),迭代(不能使用循环,pass),递归(用位运算短路原则代替if条件判断) 短路原则: 对于A&&B与运算,当条件A为false则不再执行条件B判断,故仅当条件A成立才执行条件B判断。 A||B或运算同理,A如果为true则不执行条件B判断,仅当条件A不成立才执行条件B判断。 注意:由于条件语句不能写
2020-07-04 02:02:28
280
原创 二叉树
题目描述 输入一棵二叉树的根节点,求该树的深度。从根节点到叶节点依次经过的节点(含根、叶节点)形成树的一条路径,最长路径的长度为树的深度。 例如: 给定二叉树 [3,9,20,null,null,15,7],返回它的最大深度 3 。 二叉树遍历 //DFS:先序遍历,后序遍历,中序遍历,递归 //BFS:按层遍历,通常使用队列完成 class Solution { public: int maxDepth(TreeNode* root) { //递归
2020-07-04 01:23:00
194
原创 深度搜索DFS
面试题12. 矩阵中的路径 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一格开始,每一步可以在矩阵中向左、右、上、下移动一格。如果一条路径经过了矩阵的某一格,那么该路径不能再次进入该格子。例如,在下面的3×4的矩阵中包含一条字符串“bfce”的路径(路径中的字母用加粗标出)。 [[“a”,“b”,“c”,“e”], [“s”,“f”,“c”,“s”], [“a”,“d”,“e”,“e”]] 但矩阵中不包含字符串“abfb”的路径,因为字符串的第一个字符b
2020-06-03 18:01:04
155
原创 排序
Ⅰ 选择排序 暴力遍历,双指针i与j,i不动,j移动找到数值最小时的数组下标,与i处的元素值进行交换。 Ⅱ 插入排序 将一个数组分为已排序数组与未排序数组两部分(初始已排序数组大小为1),从未排序数组中逐个取出元素,遍历已排序数组将其插入其中。 ...
2020-06-01 18:38:49
105
原创 面试题14- I. 剪绳子
给你一根长度为 n 的绳子,请把绳子剪成整数长度的 m 段(m、n都是整数,n>1并且m>1),每段绳子的长度记为 k[0],k[1]…k[m-1] 。请问 k[0]k[1]…*k[m-1] 可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。 示例 1: 输入: 2 输出: 1 解释: 2 = 1 + 1, 1 × 1 = 1 示例 2: 输入: 10 输出: 36 解释: 10 = 3 + 3 + 4, 3 × 3 × 4 = 3
2020-05-31 23:01:47
154
原创 动态规划
leetcode64 题目描述: 给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。 说明:每次只能向下或者向右移动一步。 示例: 输入: [ [1,3,1], [1,5,1], [4,2,1] ] 输出: 7 解释: 因为路径 1→3→1→1→1 的总和最小。 答案: ①定义dp[i][j]为(i,j)处的最小路径和。 定义一个m行n列的二维数组,由于数组从索引0值开始,故m行n列处的最小路径和为dp[m-1][n-1]。 ②初始值为第一行和第一列的d
2020-05-29 13:25:39
383
原创 面试题67. 把字符串转换成整数
题目描述: 写一个函数 StrToInt,实现把字符串转换成整数这个功能。不能使用 atoi 或者其他类似的库函数。 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。 当我们寻找到的第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字组合起来,作为该整数的正负号;假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成整数。 该字符串除了有效的整数部分之后也可能会存在多余的字符,这些字符可以被忽略,它们对于函数不应该造成影响。 注意:假如该字符串中
2020-05-25 20:37:24
211
原创 面试题58 - II. 左旋转字符串
题目描述 字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。 示例 1: 输入: s = “abcdefg”, k = 2 输出: “cdefgab” 示例 2: 输入: s = “lrloseumgh”, k = 6 输出: “umghlrlose” 思路1 直接采用string拼接函数 巧妙拼接:拼接两段s,从n开始剪切s.size()长度的字符串 cl
2020-05-22 14:04:47
111
原创 面试题58 - I. 翻转单词顺序
题目描述 输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字母一样处理。例如输入字符串"I am a student. “,则输出"student. a am I”。 示例 1: 输入: “the sky is blue” 输出: “blue is sky the” 示例 2: 输入: " hello world! " 输出: “world! hello” 解释: 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。 示例 3: 输入: “a
2020-05-21 23:26:33
138
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅