笔试题目
文章平均质量分 60
jingling555
永远不要停下学习的脚步
展开
-
后端开发刷题 | 没有重复项数字的全排列
给出一组数字,返回该组数字的所有排列例如:[1,2,3]的所有排列如下(以数字在数组中的位置靠前为优先级,按字典序排列输出。数据范围:数字个数 0原创 2024-09-23 21:00:13 · 887 阅读 · 0 评论 -
后端开发刷题 | 最小的K个数(优先队列)
给定一个长度为 n 的可能有重复值的数组,找出其中不去重的最小的 k 个数。例如数组元素是4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4(任意顺序皆可)。数据范围:0≤k,n≤10000,数组中每个数的大小0≤val≤1000要求:空间复杂度 O(n) ,时间复杂度 O(nlogk)原创 2024-09-23 20:39:24 · 1000 阅读 · 0 评论 -
后端开发刷题 | 滑动窗口的最大值
给定一个长度为 n 的数组 num 和滑动窗口的大小 size ,找出所有滑动窗口里数值的最大值。例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为{4,4,6,6,6,5};原创 2024-09-23 19:59:51 · 446 阅读 · 0 评论 -
后端开发刷题 | 最长无重复子数组
给定一个长度为n的数组arr,返回arr的最长无重复元素子数组的长度,无重复指的是所有数字都不相同。子数组是连续的,比如[1,3,5,7,9]的子数组有[1,3],[3,5,7]等等,但是[1,3,7]不是子数组数据范围:0≤arr.length≤105,0原创 2024-09-22 17:09:55 · 772 阅读 · 0 评论 -
后端开发刷题 | 合并区间
给出一组区间,请合并所有重叠的区间。请保证合并后的区间按区间起点升序排列。数据范围:区间组数 0≤n≤2×105,区间内 的值都满足 0≤val≤2×105。原创 2024-09-22 15:54:20 · 330 阅读 · 0 评论 -
后端开发刷题 | 字符串变形
对于一个长度为 n 字符串,我们需要对它做一些变形。首先这个字符串中包含着一些空格,就像"Hello World"一样,然后我们要做的是把这个字符串中由空格隔开的单词反序,同时反转每个字符的大小写。比如"Hello World"变形后就变成了"wORLD hELLO"。数据范围: 1≤n≤106 , 字符串中包括大写英文字母、小写英文字母、空格。进阶:空间复杂度 O(n), 时间复杂度 O(n)原创 2024-09-20 15:51:09 · 192 阅读 · 0 评论 -
后端开发刷题 | 打家劫舍
你是一个经验丰富的小偷,准备偷沿街的一排房间,每个房间都存有一定的现金,为了防止被发现,你不能偷相邻的两家,即,如果偷了第一家,就不能再偷第二家;如果偷了第二家,那么就不能偷第一家和第三家。给定一个整数数组nums,数组中的元素表示每个房间存有的现金数额,请你计算在不被发现的前提下最多的偷窃金额。数据范围:数组长度满足 1≤n≤2×105,数组中每个值满足 1≤num[i]≤5000。原创 2024-09-16 11:33:14 · 779 阅读 · 0 评论 -
后端开发刷题 | 编辑距离
给定两个字符串 str1 和 str2 ,请你算出将 str1 转为 str2 的最少操作数。你可以对字符串进行3种操作:1.插入一个字符2.删除一个字符3.修改一个字符。字符串长度满足 1≤n≤1000 ,保证字符串中只出现小写英文字母。原创 2024-09-16 11:08:28 · 632 阅读 · 0 评论 -
后端开发刷题 | 数字字符串转化成IP地址
现在有一个只包含数字的字符串,将该字符串转化成IP地址的形式,返回所有可能的情况。例如:给出的字符串为"25525522135",返回["255.255.22.135", "255.255.221.35"]. (顺序没有关系)数据范围:字符串长度 0≤n≤12要求:空间复杂度 O(n!),时间复杂度 O(n!注意:ip地址是由四段数字组成的数字序列,格式如 "x.x.x.x",其中 x 的范围应当是 [0,255]。原创 2024-09-15 17:27:23 · 1194 阅读 · 0 评论 -
后端开发刷题 | 最长回文子串
对于长度为n的一个字符串A(仅包含数字,大小写英文字母),请设计一个高效算法,计算其中最长回文子串的长度。数据范围: 1≤n≤1000要求:空间复杂度 O(1),时间复杂度 O(n2)进阶: 空间复杂度 O(n),时间复杂度 O(n)原创 2024-09-15 16:53:15 · 390 阅读 · 0 评论 -
后端开发刷题 | 最长上升子序列
给定一个长度为 n 的数组 arr,求它的最长严格上升子序列的长度。所谓子序列,指一个数组删掉一些数(也可以不删)之后,形成的新数组。例如 [1,5,3,7,3] 数组,其子序列有:[1,3,3]、[7] 等。但 [1,6]、[1,3,5] 则不是它的子序列。我们定义一个序列是的,当且仅当该序列两个下标 i 和 j 满足 i原创 2024-09-13 11:18:11 · 811 阅读 · 0 评论 -
后端开发刷题 | 兑换零钱(动态规划)
给定数组arr,arr中所有的值都为正整数且不重复。每个值代表一种面值的货币,每种面值的货币可以使用任意张,再给定一个aim,代表要找的钱数,求组成aim的最少货币数。如果无解,请返回-1.数据范围:数组大小满足0≤n≤10000 , 数组中每个数字都满足 0原创 2024-09-12 11:11:22 · 883 阅读 · 0 评论 -
后端开发刷题 | 把数字翻译成字符串(动态规划)
有一种将字母编码成数字的方式:'a'->1, 'b->2', ... , 'z->26'。现在给一串数字,返回有多少种可能的译码结果数据范围:字符串长度满足 0原创 2024-09-12 10:26:07 · 966 阅读 · 0 评论 -
后端开发刷题 | 矩阵的最小路径和
给定一个 n * m 的矩阵 a,从左上角开始每次只能向右或者向下走,最后到达右下角的位置,路径上所有的数字累加起来就是路径和,输出所有的路径中最小的路径和。数据范围: 1≤n,m≤500,矩阵中任意值都满足 0≤ai,j≤100要求:时间复杂度 O(nm)例如:当输入[[1,3,5,9],[8,1,3,4],[5,0,6,1],[8,8,4,0]]时,对应的返回值为12,原创 2024-09-11 11:23:30 · 541 阅读 · 0 评论 -
后端开发刷题 | 不同路径的数目
一个机器人在m×n大小的地图的左上角(起点)。机器人每次可以向下或向右移动。机器人要到达地图的右下角(终点)。可以有多少种不同的路径从起点走到终点?备注:m和n小于等于100,并保证计算结果在int范围内数据范围:0原创 2024-09-06 20:49:51 · 709 阅读 · 0 评论 -
后端开发刷题 | 最长公共子序列(非连续)
给定两个字符串str1和str2,输出两个字符串的最长公共子序列。如果最长公共子序列为空,则返回"-1"。目前给出的数据,仅仅会存在一个最长的公共子序列。数据范围:0≤∣str1∣,∣str2∣≤2000要求:空间复杂度 O(n2),时间复杂度 O(n2)原创 2024-09-05 16:47:40 · 642 阅读 · 0 评论 -
后端开发刷题 | 数组中的逆序对
在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。即输出P mod 1000000007数据范围: 对于 50%50% 的数据, size≤104对于 100%100% 的数据, size≤105数组中所有数字的值满足 0≤val≤109要求:空间复杂度 O(n),时间复杂度 O(nlogn)原创 2024-09-04 11:42:47 · 709 阅读 · 0 评论 -
后端开发刷题 | 判断链表中是否有环
我们可以用双指针技巧,同向访问的双指针,速度是快慢的,只要有环,二者就会在环内不断循环,且因为有速度差异,二者一定会相遇。输入分为两部分,第一部分为链表,第二部分代表是否有环,然后将组成的head头结点传入到函数里面。第一部分{3,2,0,-4}代表一个链表,第二部分的1表示,-4到位置1(注:头结点为位置0),即-4->2存在一个链接,组成传入的head为一个带环的链表,返回true。第一部分{1}代表一个链表,-1代表无环,组成传入head为一个无环的单链表,返回false。判断给定的链表中是否有环。原创 2024-08-28 18:06:26 · 429 阅读 · 0 评论 -
后端开发刷题 | 合并k个已排序的链表
分治即“分而治之”,“分”指的是将一个大而复杂的问题划分成多个性质相同但是规模更小的子问题,子问题继续按照这样划分,直到问题可以被轻易解决;经过分治后的子问题,需要将解进行合并才能得到原问题的解,因此整个分治过程经常用递归来实现。双指针指的是在遍历对象的过程中,不是普通的使用单个指针进行访问,而是使用两个指针(特殊情况甚至可以多个),两个指针或是同方向访问两个链表、或是同方向访问一个链表(快慢指针)、或是相反方向扫描(对撞指针),从而达到我们需要的目的。要求:时间复杂度 O(nlogn)原创 2024-08-22 12:47:16 · 846 阅读 · 1 评论 -
后端开发刷题 | 合并两个排序的链表
输入两个递增的链表,单个链表的长度为n,合并这两个链表并使新链表中的节点仍然是递增排序的。退出循环后,哪个pHead不为空,哪个结点(包括剩下的)给虚拟结点的。数据范围: 0≤n≤1000,−1000≤节点值≤1000。创建一个虚拟结点和一个哨兵结点。当pHead1与pHead。小哪个赋给虚拟结点的。原创 2024-08-21 12:42:16 · 670 阅读 · 0 评论 -
后端开发刷题 | 主持人调度【贪心算法】
并且活动主持人需要全程参与活动,换句话说,一个主持人参与了第 i 个活动,那么该主持人在 (starti,endi) 这个时间段不能参与其他任何活动。有 n 个活动即将举办,每个活动都有开始时间与活动的结束时间,第 i 个活动的开始时间是 starti ,第 i 个活动的结束时间是 endi ,举办某个活动就需要为该活动准备一个活动主持人。贪心思想属于动态规划思想中的一种,其基本原理是找出整体当中给的每个局部子结构的最优解,并且最终将所有的这些局部最优解结合起来形成整体上的一个最优解。原创 2024-08-18 15:32:19 · 521 阅读 · 0 评论 -
后端开发刷题 | 有效括号序列【栈】
这里可以使用栈,根据栈的先进后出,后进先出的特点,来存储半边的括号,当出现左括号,向栈中压入右括号,然后比较栈中压入的右括号与字符串中当前的括号相比,来判断括号是否成双成对。给出一个仅包含字符'(',')','{','}','['和']',的字符串,判断给出的字符串是否是合法的括号序列。括号必须以正确的顺序关闭,"()"和"()[]{}"都是合法的括号序列,但"(]"和"([)]"不合法。要求:空间复杂度 O(n),时间复杂度 O(n)数据范围:字符串长度0≤n≤10000。原创 2024-08-18 11:22:45 · 470 阅读 · 0 评论 -
后端开发刷题 | 最长公共子串【动态规划】
如果要求dp[i][j],也就是str1的第i个字符和str2的第j个字符为最后一个元素所构成的最长公共子串,我们首先需要判断这两个字符是否相等。如果不相等,那么他们就不能构成公共子串,也就是。原创 2024-08-17 17:10:32 · 182 阅读 · 0 评论 -
后端开发刷题 | 最小花费爬楼梯【动态规划】
给定一个整数数组 cost cost ,其中 cost[i] cost[i] 是从楼梯第i i 个台阶向上爬需要支付的费用,下标从0开始。你将从下标为1的台阶开始,支付5 ,向上爬两个台阶,到达楼梯顶部。1.支付 1 ,向上爬两个台阶,到达下标为 2 的台阶。2.支付 1 ,向上爬两个台阶,到达下标为 4 的台阶。3.支付 1 ,向上爬两个台阶,到达下标为 6 的台阶。4.支付 1 ,向上爬一个台阶,到达下标为 7 的台阶。5.支付 1 ,向上爬两个台阶,到达下标为 9 的台阶。原创 2024-08-17 16:39:00 · 643 阅读 · 0 评论 -
后端开发刷题 | 跳台阶问题
一只青蛙一次可以跳上1级台阶,也可以跳上2级。青蛙要跳上两级台阶有两种跳法,分别是:先跳一级,再跳一级或者直接跳两级。当台阶为3个时,有3种方式跳,全部跳一级;跳台阶问题可以使用递归解决,现在有两个选择,一个是跳一级,一个是跳两级,当台阶为2个时,有2种方式跳:全部跳一级,或者直接跳两级。要求:时间复杂度:O(n) ,空间复杂度: O(1)当台阶为7个时,有21种方式跳.......当台阶为4个时,有5种方式跳.......当台阶为5个时,有8种方式跳.......当n>2时,为f(n-1)+f(n-2)原创 2024-08-17 12:40:08 · 662 阅读 · 0 评论 -
后端开发刷题 | 二叉树的最大深度
这里使用的是递归的方法来实现,比较简洁,左右节点遍历后取最大值,就是最大深度。数据范围:0≤n≤100000,树上每个节点的val满足 ∣val∣≤100。深度是指树的根节点到任一叶子节点路径上节点的数量。要求: 空间复杂度 O(1),时间复杂度 O(n)最大深度是所有叶子节点的深度的最大值。(注:叶子节点是指没有子节点的节点。求给定二叉树的最大深度,原创 2024-08-17 12:01:54 · 399 阅读 · 0 评论 -
后端开发刷题 | 二叉树的前序遍历
数据范围:二叉树的节点数量满足 1≤n≤100 ,二叉树节点的值满足 1≤val≤100,树的各节点的值各不相同。给你二叉树的根节点 root ,返回它节点值的 前序。该题可以用递归来解决,前序遍历的顺序是根左右。原创 2024-08-17 11:49:21 · 309 阅读 · 0 评论 -
后端开发刷题 | 寻找峰值【二分法】
该题只要找出一个峰值即可,可以使用二分法,判断mid附近的元素来寻找峰值,如果mid右边的元素大于mid的数值,那么峰值可能出现在右半部分,只要将left=mid+1,再判断它右边的元素是否小于它,即可找到峰值;反之mid右边的元素小于mid的数值,那么峰值可能出现在左半部分,只要将right=,再判断它左边的元素。给定一个长度为n的数组nums,请你找到峰值并返回其索引。4和8都是峰值元素,返回4的索引1或者8的索引5都可以。2.假设 nums[-1] = nums[n] = −∞。原创 2024-08-17 11:15:39 · 436 阅读 · 0 评论 -
后端开发刷题 | 二分查找
首先这是一个已经排好序的升序数组,可以定义left,mid,right来实现二分查找,每次用target与mid下标的值比较,如果大于,则说明目标元素可能在右半部分,让mid=left+1;给定一个 元素升序的、无重复数字的整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标(下标从 0 开始),否则返回 -1。数据范围:0≤len(nums)≤2×105 , 数组中任意值满足 ∣val∣≤109。nums为空,返回-1。原创 2024-08-17 10:03:32 · 315 阅读 · 0 评论 -
后端开发刷题 | 链表内指定区间反转【链表篇】
将一个节点数为 size 链表 m 位置到 n 位置之间的区间反转,要求时间复杂度 O(n)O(n),空间复杂度 O(1)O(1)。给出的链表为 1→2→3→4→5→NULL1→2→3→4→5→NULL, m=2,n=4。可以先将其变成1->3->2->4->5,然后再变成1->4->3->2->5。要求:时间复杂度 O(n)O(n) ,空间复杂度 O(n)O(n)进阶:时间复杂度 O(n)O(n),空间复杂度 O(1)O(1)返回 1→4→3→2→5→NULL。原创 2024-08-17 08:30:00 · 471 阅读 · 0 评论 -
后端开发刷题 | 反转链表【链表篇】
给定一个单链表的头结点pHead(该头节点是有值的,比如在下图,它的val是1),长度为n,反转该链表后,返回新链表的表头。要求:空间复杂度 O(1)O(1) ,时间复杂度 O(n)O(n)。经反转后,原链表变为{3,2,1},所以对应的输出为{3,2,1}。如当输入链表{1,2,3}时,数据范围: 0≤n≤1000。原创 2024-08-16 15:13:01 · 578 阅读 · 0 评论 -
后端开发刷题 | 排序算法--冒泡排序
排序序列从前向后(从下标较小的元素开始),依次对相邻两个元素的值进行两两比较,若发现逆序则交换,使值较大的元素逐渐从前移向后部。找到了该数组中最大值放在了末端,所以一个元素已经有序,现在第二轮排序,只需要将前面的进行排序。总结:每一轮排序都可以让一个元素在有序的位置上,i个元素进行排序,需要进行i-1轮的排序。这里使用了flag来判断是否排序过程中,该数组已经有序,提前结束排序,这样排序效率更高。有一个长度为7的无序数组,按照从小到大的顺序排序后输出。数组中数据排序后输出。原创 2024-08-16 14:24:38 · 341 阅读 · 0 评论 -
后端开发刷题 | 笔试
Linux 中,下面哪个选项inode 中记录的数据()A最后一次读取时间B最近修改的时间C该文件的实际内容D该文件的容量正确答案:C解析:储存文件的元信息,比如文件的创建者、文件的创建日期、文件的大小等等。这种储存文件元信息的区域就叫做inode,中文译名为"索引节点”。Java 中,下面代码会出现的是()ABCD正确答案:D下面 Java 代码的运行结果为()123456publicstaticvoidAfalse trueB。原创 2024-07-24 19:52:52 · 1155 阅读 · 0 评论 -
后端开发刷题 | 笔试
TCP 传输连接的建立采用“3 次握手”的方式,包括 3 个基本的步骤:A 发送一个请求连接报文给B(SYN 标志置为 1),B 发回确认(SYN+ACK 标志置为 1),A 再加以确认(ACK 标志置为1)。根据缺页中断的处理流程,产生缺页中断后,首先去内存寻找空闲物理块,若内存没有空闲物理块,使用相应的页面置换算法决定淘汰页面,然后调出该淘汰页面,最后调入该进程需要访问的页面,所以答案选D。原创 2024-07-23 20:57:36 · 1298 阅读 · 0 评论