- 博客(845)
- 资源 (1)
- 收藏
- 关注

原创 牛客选择错题本二
1、下面有关forward和redirect的描述,正确的是() ?正确答案: B C D 你的答案: A B C D (错误)forward是服务器将控制权转交给另外一个内部服务器对象,由新的对象来全权负责响应用户的请求执行forward时,浏览器不知道服务器发送的内容是从何处来,浏览器地址栏中还是原来的地址执行redirect时,服务器端告诉浏览器重新去请求地址forward是内部重定向,redirect是外部重定向redirect默认将产生301 Permanently moved的
2021-11-20 16:34:23
558

原创 牛客选择题错题本
1、return i++ 是先 return i 然后 i++,与 赋值语句是一个道理2、一个容器类数据结构,读写平均,使用锁机制保证线程安全。如果要综合提高该数据结构的访问性能,最好的办法是______。只对写操作加锁,不对读操作加锁读操作不加锁,采用copyOnWrite的方式实现写操作分区段加锁无法做到答案:CA,只对写操作加锁,不对读操作加锁,会造成读到脏数据B,CopyOnWrite的核心思想是利用高并发往往是读多写少的特性,对读操作不加锁,对写操作,先复制一份新的集合,在
2021-11-02 11:20:58
1179
原创 【无标题】
我的代码也可以运行得出结果,但是在极端情况下并不是 logn 的时间复杂度(比如整个数组全是 target 的情况),但是也写一下把,先找到目标 target 在数组中的位置,然后分别从左右开始找是否等于 target,比较简单。输入:nums = [5,7,7,8,8,10], target = 8。输入:nums = [5,7,7,8,8,10], target = 6。如果数组中不存在目标值 target,返回 [-1, -1]。nums 是一个非递减数组。输出:[-1,-1]输出:[-1,-1]
2025-03-22 14:38:42
396
原创 437. 路径总和 III
这个题本身是一个非常简单的回溯问题,but,有一个小坑看了别人的题解才知道:以 Java 语言为例,记录路径时若直接执行 lists.add(list) ,则是将此 list 对象加入了 lists;输入:root = [5,4,8,11,null,13,4,7,2,null,null,5,1], targetSum = 22。输入:root = [10,5,-3,3,2,null,11,3,-2,null,1], targetSum = 8。解释:和等于 8 的路径有 3 条,如图所示。
2025-03-18 10:04:36
161
原创 114. 二叉树展开为链表(两种思路)
重点讲解一下空间复杂度为 1 的进阶方式,由于我们是要以先序的方式展开成一个链表,那仅需要找到当前节点的左子树的最右边一颗(如果是二叉搜索树的话,就找到左子树中数值最大的那个结点),找到左子树的最右了以后,将此节点的右指针修改为当前节点的右指针,如图所示。输出:[1,null,2,null,3,null,4,null,5,null,6]输入:root = [1,2,5,3,4,null,6]然后将当前节点的左指针设置为空,右指针设置为next。输入:root = [0]输入:root = []
2025-03-13 10:28:01
296
原创 199. 二叉树的右视图
这个题我用自己的方法写的,本来觉得使用层次遍历的方式需要定义一个队列,想看看官方题解有没有什么简单的方法,结果官方写的非常复杂,还不如我这个方法,就是普通的层次遍历,只不过,每次层次遍历的时候记录当前队列中有多少个元素,用 size 变量记录下来,然后循环,当遇到当前层的最后一个元素,也就是 i == 0 的时候,就是最右侧的视图,直接加入 list 就行了,非常简单的思路,之前还有一个题是,二叉树的层次遍历,也是一样的方法,用 for 循环记录当前层的个数,然后加入 list 返回就行了。
2025-03-12 20:05:26
333
原创 19. 删除链表的倒数第 N 个结点
题目要求使用一遍扫描,所以一定是使用双指针的方法,由于要删除的是倒数第 N 个结点,所以我们必须定位到倒数第 N + 1 个结点的位置,这样直接 .next = .next.next 就可以删除了,所以定义一个头发节点,让慢指针从头发节点出发,快指针从头结点出发,快指针先走 n 步,然后快慢指针一起走,当快指针指导末尾的时候,慢指针所指的节点就是要删除节点的前一个节点,直接删除就可以了。输入:head = [1,2,3,4,5], n = 2。输入:head = [1,2], n = 1。
2025-03-11 09:46:04
168
原创 【无标题】
再往下排列的状况也列出来:[4, 2, 1, 7, 0, 3 ,6],找到第一个升序那就是[3, 6] ,这个情况比较特殊直接就是变成[6, 3],那就再说一种情况,[4, 2, 1, 7, 0, 6 ,3],找到升序是[0, 6]然后后面找到第一个比 0 大的,也就是 3,交换成[4, 2, 1, 7, 3, 6, 0],紧接着后面的 6, 0 变成升序,最后的结果就是[4, 2, 1, 7, 3, 0 ,6]例如,arr = [1,2,3] 的下一个排列是 [1,3,2]。输出:[1,3,2]
2025-03-06 14:40:55
399
原创 215. 数组中的第K个最大元素
简单的堆排序,总算是有点回忆了,只需要堆排序K次,每次都能挑出最大的那个数,第K次就是第K大的。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。输入: [3,2,3,1,2,4,5,5,6], k = 4。你必须设计并实现时间复杂度为 O(n) 的算法解决此问题。输入: [3,2,1,5,6,4], k = 2。
2025-02-28 10:49:11
147
原创 94. 二叉树的中序遍历
整个代码其实分为两部分,和递归一样,分别是访问左子树和访问右子树,只不过从递归变成了使用栈来暂存。给定一个二叉树的根节点 root ,返回 它的 中序 遍历。进阶: 递归算法很简单,你可以通过迭代算法完成吗?输入:root = [1,null,2,3]树中节点数目在范围 [0, 100] 内。树中序遍历的非递归算法,必须写一个博客。输入:root = [1]输入:root = []输出:[1,3,2]
2025-02-27 10:07:00
179
原创 (字节面试题)青蛙跳台变形(一次 k 阶台阶)
你一开始在底部,每次可以向上迈最多K级台阶(最少1级),问到达第N级台阶有多少种不同方式,一个学姐在字节面试面到的题目,一次 可以 迈 k 阶台阶,普通的青蛙跳台是迈 1 或者 2,现在是 1 - k 都有可能,所以,依旧使用数组进行求解:范围在 i - k 之间的数都加上,动态转移方程:dp[n] = dp[n - 1] + dp[n - 2] + ..... + dp[n - k]解:import java.util.*;public class Main { public stat
2022-03-12 09:27:30
820
1
原创 279. 完全平方数
给你一个整数 n ,返回 和为 n 的完全平方数的最少数量 。完全平方数 是一个整数,其值等于另一个整数的平方;换句话说,其值等于一个整数自乘的积。例如,1、4、9 和 16 都是完全平方数,而 3 和 11 不是。示例 1:输入:n = 12输出:3解释:12 = 4 + 4 + 4示例 2:输入:n = 13输出:2解释:13 = 4 + 9来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/perfect-squares著作权归
2022-03-11 09:29:22
577
原创 22. 括号生成
数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。示例 1:输入:n = 3输出:["((()))","(()())","(())()","()(())","()()()"]示例 2:输入:n = 1输出:["()"]来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/generate-parentheses著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 括号生成,递归版本
2022-03-11 09:08:47
1932
原创 313. 超级丑数
超级丑数 是一个正整数,并满足其所有质因数都出现在质数数组 primes 中。给你一个整数 n 和一个整数数组 primes ,返回第 n 个 超级丑数 。题目数据保证第 n 个 超级丑数 在 32-bit 带符号整数范围内。示例 1:输入:n = 12, primes = [2,7,13,19]输出:32解释:给定长度为 4 的质数数组 primes = [2,7,13,19],前 12 个超级丑数序列为:[1,2,4,7,8,13,14,16,19,26,28,32] 。示例 2:输入:
2022-03-08 09:51:07
339
原创 剑指 Offer 49. 丑数
我们把只包含质因子 2、3 和 5 的数称作丑数(Ugly Number)。求按从小到大的顺序的第 n 个丑数。示例:输入: n = 10输出: 12解释: 1, 2, 3, 4, 5, 6, 8, 9, 10, 12 是前 10 个丑数。说明:1 是丑数。n 不超过1690。注意:本题与主站 264 题相同:https://leetcode-cn.com/problems/ugly-number-ii/来源:力扣(LeetCode)链接:https://leetcode-cn.com/
2022-03-08 09:24:52
132
原创 47. 全排列 II
给定一个可包含重复数字的序列 nums ,按任意顺序 返回所有不重复的全排列。示例 1:输入:nums = [1,1,2]输出:[[1,1,2],[1,2,1],[2,1,1]]示例 2:输入:nums = [1,2,3]输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]提示:1 <= nums.length <= 8-10 <= nums[i] <= 10通过次数271,561提交次数422,018来
2022-03-07 09:10:24
167
原创 【美团笔试】最大子段和
题目二题目描述最大子段和是一个经典问题,即对于一个数组找出其和最大的子数组。现在允许你在求解该问题之前翻转这个数组的连续一段(如翻转{1,2,3,4,5,6}的第三个到第五个元素组成的子数组得到的是{1,2,5,4,3,6}),则翻转后该数组的最大子段和最大能达到多少?输入描述第一行有一个正整数n(1<=n<=100000),代表数组长度。第二行有n个空格隔开的整数(-1000<=ai<=1000),代表给出数组。输出描述输出一个整数,代表若允许你翻转一个子数组 ,则
2022-03-06 14:20:47
905
原创 98. 验证二叉搜索树(两种方法)
给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。有效 二叉搜索树定义如下:节点的左子树只包含 小于 当前节点的数。节点的右子树只包含 大于 当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。示例 1:输入:root = [2,1,3]输出:true示例 2:输入:root = [5,1,4,null,null,3,6]输出:false解释:根节点的值是 5 ,但是右子节点的值是 4 。提示:树中节点数目范围在[1, 104] 内-231 <=
2022-03-06 09:08:28
2048
原创 647. 回文子串
给你一个字符串 s ,请你统计并返回这个字符串中 回文子串 的数目。回文字符串 是正着读和倒过来读一样的字符串。子字符串 是字符串中的由连续字符组成的一个序列。具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被视作不同的子串。示例 1:输入:s = “abc”输出:3解释:三个回文子串: “a”, “b”, “c”示例 2:输入:s = “aaa”输出:6解释:6个回文子串: “a”, “a”, “a”, “aa”, “aa”, “aaa”提示:1 <= s.l
2022-03-04 16:46:27
417
原创 5. 最长回文子串(两种方法)
给你一个字符串 s,找到 s 中最长的回文子串。示例 1:输入:s = “babad”输出:“bab”解释:“aba” 同样是符合题意的答案。示例 2:输入:s = “cbbd”输出:“bb”提示:1 <= s.length <= 1000s 仅由数字和英文字母组成来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/longest-palindromic-substring著作权归领扣网络所有。商业转载请联系官方授权,非
2022-03-04 16:17:33
3633
原创 46. 全排列(两种方法)
给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。示例 1:输入:nums = [1,2,3]输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]示例 2:输入:nums = [0,1]输出:[[0,1],[1,0]]示例 3:输入:nums = [1]输出:[[1]]提示:1 <= nums.length <= 6-10 <= nums[i] <= 10nu
2022-03-04 12:41:19
419
原创 410. 分割数组的最大值
给定一个非负整数数组 nums 和一个整数 m ,你需要将这个数组分成 m 个非空的连续子数组。设计一个算法使得这 m 个子数组各自和的最大值最小。示例 1:输入:nums = [7,2,5,10,8], m = 2输出:18解释:一共有四种方法将 nums 分割为 2 个子数组。其中最好的方式是将其分为 [7,2,5] 和 [10,8] 。因为此时这两个子数组各自的和的最大值为18,在所有情况中最小。示例 2:输入:nums = [1,2,3,4,5], m = 2输出:9示例 3
2022-03-03 16:42:32
191
原创 [编程题]万万没想。到之抓捕孔连顺
我叫王大锤,是一名特工。我刚刚接到任务:在字节跳动大街进行埋伏,抓捕恐怖分子孔连顺。和我一起行动的还有另外两名特工,我提议我们在字节跳动大街的N个建筑中选定3个埋伏地点。为了相互照应,我们决定相距最远的两名特工间的距离不超过D。我特喵是个天才! 经过精密的计算,我们从X种可行的埋伏方案中选择了一种。这个方案万无一失,颤抖吧,孔连顺!……万万没想到,计划还是失败了,孔连顺化妆成小龙女,混在cosplay的队伍中逃出了字节跳动大街。只怪他的伪装太成功了,就是杨过本人来了也发现不了的!请听
2022-03-03 09:43:11
209
原创 万万没.想到之聪明的编辑(AC)
我叫王大锤,是一家出版社的编辑。我负责校对投稿来的英文稿件,这份工作非常烦人,因为每天都要去修正无数的拼写错误。但是,优秀的人总能在平凡的工作中发现真理。我发现一个发现拼写错误的捷径:\1. 三个同样的字母连在一起,一定是拼写错误,去掉一个的就好啦:比如 helllo -> hello\2. 两对一样的字母(AABB型)连在一起,一定是拼写错误,去掉第二对的一个字母就好啦:比如 helloo -> hello\3. 上面的规则优先“从左到右”匹配,即如果是AABBCC,虽然AABB和BBC
2022-03-03 09:14:51
264
原创 260. 只出现一次的数字 III
给定一个整数数组 nums,其中恰好有两个元素只出现一次,其余所有元素均出现两次。 找出只出现一次的那两个元素。你可以按 任意顺序 返回答案。进阶:你的算法应该具有线性时间复杂度。你能否仅使用常数空间复杂度来实现?示例 1:输入:nums = [1,2,1,3,2,5]输出:[3,5]解释:[5, 3] 也是有效的答案。示例 2:输入:nums = [-1,0]输出:[-1,0]示例 3:输入:nums = [0,1]输出:[1,0]提示:2 <= nums.length &
2022-03-01 09:35:52
149
原创 123. 买卖股票的最2佳时机 III
给定一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你最多可以完成 两笔 交易。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。示例 1:输入:prices = [3,3,5,0,0,3,1,4]输出:6解释:在第 4 天(股票价格 = 0)的时候买入,在第 6 天(股票价格 = 3)的时候卖出,这笔交易所能获得利润 = 3-0 = 3 。随后,在第 7 天(股票价格 = 1)的时候买入,在第 8 天 (股票价格 =
2022-02-22 10:12:09
154
原创 122. 买卖股票的最时机 II
给定一个数组 prices ,其中 prices[i] 表示股票第 i 天的价格。在每一天,你可能会决定购买和/或出售股票。你在任何时候 最多 只能持有 一股 股票。你也可以购买它,然后在 同一天 出售。返回 你能获得的 最大 利润 。示例 1:输入: prices = [7,1,5,3,6,4]输出: 7解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 。随后,在第 4 天(股票价格 = 3)的时候买入
2022-02-22 09:10:47
141
原创 7-12 特立独行的幸福 (25 分)(如何判断特立独行)
对一个十进制数的各位数字做一次平方和,称作一次迭代。如果一个十进制数能通过若干次迭代得到 1,就称该数为幸福数。1 是一个幸福数。此外,例如 19 经过 1 次迭代得到 82,2 次迭代后得到 68,3 次迭代后得到 100,最后得到 1。则 19 就是幸福数。显然,在一个幸福数迭代到 1 的过程中经过的数字都是幸福数,它们的幸福是依附于初始数字的。例如 82、68、100 的幸福是依附于 19 的。而一个特立独行的幸福数,是在一个有限的区间内不依附于任何其它数字的;其独立性就是依附于它的的幸福数的个数。如
2022-02-16 15:57:17
733
原创 NC7 买卖股票的最好时机(一)
假设你有一个数组prices,长度为n,其中prices[i]是股票在第i天的价格,请根据这个价格数组,返回买卖股票能获得的最大收益1.你可以买入一次股票和卖出一次股票,并非每天都可以买入或卖出一次,总共只能买入和卖出一次,且买入必须在卖出的前面的某一天2.如果不能获取到任何利润,请返回03.假设买入卖出均无手续费数据范围: 0 \le n \le 10^5 , 0 \le val \le 10^40≤n≤105,0≤val≤104要求:空间复杂度 O(1)O(1),时间复杂度 O(n)O(
2022-02-16 10:50:47
189
原创 NC2 重排链表
将给定的单链表\ L L: L_0→L_1→…→L_{n-1}→L_ nL0→L1→…→Ln−1→Ln重新排序为:L_0→L_n →L_1→L_{n-1}→L_2→L_{n-2}→…L0→Ln→L1→Ln−1→L2→Ln−2→…要求使用原地算法,不能只改变节点内部的值,需要对实际的节点进行交换。数据范围:链表长度 0 \le n \le 200000≤n≤20000 ,链表中每个节点的值满足 0 \le val \le 10
2022-02-16 10:18:19
539
原创 逗娱面经(人生中第一个视频面试)
人生中的第一个视频技术面试,面试应该是一个主管,刚上来问的笔试题目,当时答的一般,直接凑合过去了,应该是没有一丝问题,总结一波面经!!!int 和 long 的区别int 的取值范围排序算法了解过吗说一下快速排序哪些nlog的稳定的排序(归并排序)手写算法,记录根节点到叶子结点的值,求出最大的(写出来了,差点慌了)public static int findMaxValue(TreeNode root, int val) { if (root == nul
2022-02-15 17:32:49
1963
2
原创 NC1 大数加法
描述以字符串的形式读入两个数字,编写一个函数计算它们的和,以字符串形式返回。数据范围:len(s),len(t) \le 100000len(s),len(t)≤100000,字符串仅由’0’~‘9’构成要求:时间复杂度 O(n)O(n)示例1输入:“1”,“99”复制返回值:“100”复制说明:1+99=100示例2输入:“114514”,""复制返回值:“114514”大概是废了,大数加法已经不会写了,cao,本题使用 StringBuilder 类,每次添加记录
2022-02-15 11:39:10
187
原创 逗娱-游戏程序开发实习生测试题
1.1 以下程序中value最终值为多少?long value = (int)8.7;value %= 3;A. 0B. 1C. 2D. 31.2 各种排序算法中,最低的平均时间复杂度是A. O(n)B. O(n^2)C. O(nlogn)D.O(1)答:C1.3 有两个线程都能访问n,初始时n为0,⼀个线程执⾏n++,n+=2,另⼀个线程执⾏n+=3,当两个线程都执行完后n可能的值为(注:线程都会执行完,不会异常挂掉)A. 3B. 4C. 5D. 61.4 路
2022-02-14 15:56:00
3429
2
原创 142. 环形链表 II
给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。不允许修改 链表。示例 1:输入:head = [3,2,0,-4], pos = 1输出:返回索引为
2022-02-14 11:01:51
135
原创 41. 缺失的第一个正数
给你一个未排序的整数数组 nums ,请你找出其中没有出现的最小的正整数。请你实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案。示例 1:输入:nums = [1,2,0]输出:3示例 2:输入:nums = [3,4,-1,1]输出:2示例 3:输入:nums = [7,8,9,11,12]输出:1提示:1 <= nums.length <= 5 * 105-231 <= nums[i] <= 231 - 1来源:力扣(LeetCode)
2022-02-11 09:37:51
446
原创 41. 缺失的第一个正数
给你一个未排序的整数数组 nums ,请你找出其中没有出现的最小的正整数。请你实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案。示例 1:输入:nums = [1,2,0]输出:3示例 2:输入:nums = [3,4,-1,1]输出:2示例 3:输入:nums = [7,8,9,11,12]输出:1提示:1 <= nums.length <= 5 * 105-231 <= nums[i] <= 231 - 1通过次数186,674提交次数
2022-01-25 10:22:02
492
原创 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 均按 非递减顺序 排列来源:力扣(LeetCo
2022-01-24 11:15:57
113
原创 (复盘)剑指 Offer II 070. 排序数组中只出现一次的数字
给定一个只包含整数的有序数组 nums ,每个元素都会出现两次,唯有一个数只会出现一次,请找出这个唯一的数字。示例 1:输入: nums = [1,1,2,3,3,4,4,8,8]输出: 2示例 2:输入: nums = [3,3,7,7,10,11,11]输出: 10提示:1 <= nums.length <= 1050 <= nums[i] <= 105进阶: 采用的方案可以在 O(log n) 时间复杂度和 O(1) 空间复杂度中运行吗?注意:本题与主站
2022-01-20 11:34:08
783
原创 剑指 Offer II 069. 山峰数组的顶部
符合下列属性的数组 arr 称为 山峰数组(山脉数组) :arr.length >= 3存在 i(0 < i < arr.length - 1)使得:arr[0] < arr[1] < … arr[i-1] < arr[i]arr[i] > arr[i+1] > … > arr[arr.length - 1]给定由整数组成的山峰数组 arr ,返回任何满足 arr[0] < arr[1] < … arr[i - 1] < ar
2022-01-20 10:38:26
160
原创 (需复盘)剑指 Offer II 031. 最近最少使用缓存
运用所掌握的数据结构,设计和实现一个 LRU (Least Recently Used,最近最少使用) 缓存机制 。实现 LRUCache 类:LRUCache(int capacity) 以正整数作为容量 capacity 初始化 LRU 缓存int get(int key) 如果关键字 key 存在于缓存中,则返回关键字的值,否则返回 -1 。void put(int key, int value) 如果关键字已经存在,则变更其数据值;如果关键字不存在,则插入该组「关键字-值」。当缓存容量达到
2022-01-19 17:10:01
546
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人