刷题
文章平均质量分 56
LeetCode常见题型及剑指Offer
可能是一只知更鸟
The connect dots will lead me to the Bright Future.
展开
-
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置
题目描述:给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。输入: [1,3,5,6], 5。输入: [1,3,5,6], 0。你可以假设数组中无重复元素。原创 2022-09-12 15:54:12 · 575 阅读 · 2 评论 -
剑指:二叉树有关题目
题目链接:JZ7 重建二叉树题目描述:给定节点数为 n 的二叉树的前序遍历和中序遍历结果,请重建出该二叉树并返回它的头结点。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建出如下图所示。前提条件:pre 和 vin 均无重复元素vin出现的元素均出现在 pre里只需要返回根结点,系统会自动输出整颗树做答案对比要求:空间复杂度 O(n),时间复杂度 O(n)题目分析:已知前序遍历和中序遍历可以唯一确定一棵二叉树,前序遍历可以首先确定原创 2022-09-04 13:01:57 · 316 阅读 · 0 评论 -
笔试题:给定一个数组和一个目标值,找出数组中和为目标值的两个数
给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。网龙java开发8.21笔试: ACM 输入输出太麻烦了!示例:给定nums = [2,7,11,15], target = 9。因为nums[0] + nums[1] = 2 + 7 = 9。所以返回 [0,1]原创 2022-08-21 21:26:50 · 1183 阅读 · 0 评论 -
将数组转换为“长城”数组 最少需要几次操作
嘤嘤觉得长城很美,特别是它的锯齿,非常优雅,现在有一个数组,想把这个数组变为“长城”,即对于“长城”中的每一个元素左右两边的元素相等,并且与它不相等。例如{2,1,2,1,2}是长城,{2,1,3,4,5}不是长城;每次可以将一个元素加1,请问最少需要多少次?输出:一个整数 表示最少的操作次数。输入:数组长度+数组每一个元素。原创 2022-08-20 16:51:01 · 2485 阅读 · 0 评论 -
JZ73:翻转单词序列
题目链接: JZ73 翻转单词序列题目描述:牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如, “nowcoder. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a nowcoder.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?数据范围:1 ≤\le≤ n ≤\le≤ 100进阶:空间复杂度 O(n) ,时间复杂度 O原创 2022-06-05 12:13:37 · 179 阅读 · 0 评论 -
JZ77:按之字形顺序打印二叉树
题目链接:JZ77 按之字形顺序打印二叉树题目描述:给定一个二叉树,返回该二叉树的之字形层序遍历,(第一层从左向右,下一层从右向左,一直这样交替)数据范围:0 ≤\le≤ n ≤\le≤ 1500,树上每个节点的val满足∣val∣<=1500要求:空间复杂度:O(n),时间复杂度:O(n)题目分析:层次遍历+记录层数,利用双端队列层次遍历的基础上,记录层数layer,如果为奇数层,则从左到右打印,偶数层,则从右向左打印。时间复杂度为O(n),空间复杂度也为O(n)import java.u原创 2022-05-29 16:27:07 · 211 阅读 · 0 评论 -
JZ55:二叉树的深度
题目链接:JZ55 二叉树的深度题目描述:输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度,根节点的深度视为 1 。数据范围:节点的数量满足 0 ≤\le≤ n ≤\le≤ 100 ,节点上的值满足 0 ≤\le≤ val ≤\le≤ 100进阶:空间复杂度 O(1),时间复杂度 O(n)题目分析:①递归调用:深度即高度,二叉树的递归,就是将某个结点的左右子树分别看成二叉树求高度,这样就将原问题化为子问题,递归调用原函数。时间原创 2022-05-23 11:28:16 · 142 阅读 · 0 评论 -
JZ18:删除链表的节点
题目链接:JZ18 删除链表的节点题目描述:给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。返回删除后的链表的头节点。数据范围:0<=链表节点值<=100000<=链表长度<=10000题目分析:①记录待删除节点的上一个节点,删除当前节点,并将上一个节点指向当前节点的下一个节点。这种方法比较容易想,一次循环就好了。时间复杂度O(n)空间复杂度O(1)public class Solution { public ListNode delet原创 2022-05-20 11:47:38 · 513 阅读 · 0 评论 -
JZ76:删除链表中重复的结点
题目链接:JZ76 删除链表中重复的结点题目描述:在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。例如,链表 1->2->3->3->4->4->5 处理后为 1->2->5数据范围:链表长度满足 0 ≤\le≤ nnn ≤\le≤ 1000 ,链表中的值满足 1 ≤\le≤ valvalval ≤\le≤ 1000进阶:空间复杂度 O(n)O(n)O(n) ,时间复杂度 O(n)O(n)O(n)原创 2022-05-20 10:48:06 · 166 阅读 · 0 评论 -
JZ35:复杂链表的复制
题目链接:JZ35: 复杂链表的复制题目描述:输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针random指向一个随机节点),请对此链表进行深拷贝,并返回拷贝后的头结点。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)。 下图是一个含有5个结点的复杂链表。图中实线箭头表示next指针,虚线箭头表示random指针。为简单起见,指向null的指针没有画出。深拷贝和浅拷贝的区别 参考链接数据类型分为基本数据类型和引用数据类型,基本数据类型的数原创 2022-05-18 15:17:14 · 166 阅读 · 0 评论 -
JZ22:链表中倒数最后k个结点
题目链接:JZ22:链表中倒数最后k个结点题目描述:输入一个长度为 n 的链表,设链表中的元素的值为 ai ,返回该链表中倒数第k个节点。如果该链表长度小于k,请返回一个长度为 0 的链表。要求:空间复杂度 O(n)O(n)O(n),时间复杂度 O(n)O(n)O(n)进阶:空间复杂度 O(1)O(1)O(1),时间复杂度 O(n)O(n)O(n)题目分析:① 得到链表的长度;根据len和k的大小关系,移动pHead指针。注意返回null条件:链表长度为0,k为0,k大于链表长度空间复杂度 O原创 2022-05-16 22:08:50 · 86 阅读 · 0 评论 -
JZ23: 链表中环的入口结点
题目链接:JZ23 链表中环的入口结点题目描述:给一个长度为n链表,若其中包含环,请找出该链表的环的入口结点,否则,返回null。数据范围: n ≤\le≤ 10000,1≤\le≤结点值 ≤\le≤ 10000要求:空间复杂度 O(1)O(1)O(1),时间复杂度 O(n)O(n)O(n)题目分析:①快慢指针法:两个指针,fast每次走两步,slow每次走一步,如果链表有环一定能相遇,否则遍历结束。通过计算得出,相遇结点顺时针走到环入口结点的距离 和 头结点到环入口结点的距离是相等的。所以我们找原创 2022-05-15 18:20:36 · 191 阅读 · 0 评论 -
JZ52:两个链表的第一个公共结点
题目链接:JZ52:两个链表的第一个公共结点题目描述:输入两个无环的单向链表,找出它们的第一个公共结点,如果没有公共节点则返回空。数据范围: n ≤\le≤ 1000要求:空间复杂度 O(1)O(1)O(1),时间复杂度 O(n)O(n)O(n)题目分析:① 根据两个链表的长度差,让链表长的一方先走双方的差值步,之后再一起走!两个结点相同,即为两个链表的第一个公共结点。时间复杂度O(m+n) 需要遍历两个链表空间复杂度O(1) 没有借助额外的内存空间import java.util.*;原创 2022-05-14 18:14:39 · 316 阅读 · 0 评论 -
JZ25:合并两个排序的链表
题目链接:题目描述:题目分析:总结原创 2022-05-14 11:03:34 · 108 阅读 · 0 评论 -
剑指24:反转链表
题目链接:JZ24:反转链表题目描述:给定一个单链表的头结点head(该头节点是有值的,比如在下图,它的val是1),长度为n,反转该链表后,返回新链表的表头。数据范围: 0≤n≤100000\leq n\leq100000≤n≤10000要求:空间复杂度 O(1)O(1)O(1) ,时间复杂度 O(n)O(n)O(n) 。解题思路:①借助傀儡结点newHead,记录链表的头结点,增加一个headNext保存head的后一个结点。/*public class ListNode {原创 2022-05-13 16:36:04 · 120 阅读 · 0 评论 -
剑指6:从尾到头打印链表
题目链接:JZ6:从尾到头打印链表题目描述:输入一个链表的头节点,按链表从尾到头的顺序返回每个节点的值(用数组返回)。解题思路:☆注意 题目表达的意思是从这个头结点开始就存储数据的!① 使用栈;利用栈先进后出的原则,先将链表中的值逐一取出放至栈中。最后在pop()输出到数组中返回。如果没有输出限制的话,我们也可以使用Collections.reserve()进行链表反转 public class ListNode { int val; ListNode next = null原创 2022-05-11 17:45:52 · 81 阅读 · 0 评论 -
剑指4:二维数组中的查找
JZ4 二维数组中的查找原创 2022-04-06 18:12:36 · 201 阅读 · 0 评论 -
哈希表有关题目
文章目录只出现一次的数字复制带随机指针的链表宝石与石头坏键盘打字前K个高频单词只出现一次的数字链接:LeetCode136:只出现一次的数字题目:给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。思路:① 去重:我们可以用HashSet把成对的元素去掉,留下的就是只出现一次的元素了,时间复杂度O(n)② 位运算:只要是不占用额外空间来实现,就往位运算上考虑。异或操作,相同为1,不同为0代码://方法一:去重class Solution {原创 2022-04-02 10:24:41 · 1700 阅读 · 0 评论 -
LeetCode 797:所有可能的路径
1. 题目描述给定一个有 n 个节点的 有向无环图(DAG),请你找出所有从节点 0 到节点 n-1 的路径并输出(不要求按特定顺序)。二维数组的第 i 个数组中的单元都表示有向图中 i 号节点所能到达的下一些节点,空就是没有下一个结点了。输入:graph = [[1,2,3],[2],[3],[]]输出:[[0,1,2,3],[0,2,3],[0,3]]2. 题目分析首先我们根据题目描述画出图,并分析输入输出,输入输出都是二维数组,根据题目描述,我们采用深度优先搜索遍历图,求出所有可能的路径。原创 2021-08-25 22:22:14 · 665 阅读 · 0 评论