![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
剑指offer
Lv547
CS在读,想学很多东西,成为一个厉害的人
展开
-
剑指 Offer 04. 二维数组中的查找
在一个 n * m 的二维数组中,每一行都按照从左到右 非递减 的顺序排序,每一列都按照从上到下 非递减 的顺序排序。请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。给定 target = 20,返回 false。给定 target = 5,返回 true。原创 2023-08-06 22:28:48 · 183 阅读 · 0 评论 -
剑指 Offer 53 - II. 0~n-1 中缺失的数字
一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0~n-1之内。在范围0~n-1内的n个数字中有且只有一个数字不在该数组中,请找出这个数字。输入: [0,1,2,3,4,5,6,7,9]1 <= 数组长度 <= 10000。输入: [0,1,3]原创 2023-08-06 22:25:53 · 363 阅读 · 0 评论 -
剑指 Offer 53 - I. 在排序数组中查找数字 I
输入: nums = [5,7,7,8,8,10], target = 8。输入: nums = [5,7,7,8,8,10], target = 6。分别指向开始和结尾,从两边往中间遍历.统计一个数字在排序数组中出现的次数。nums 是一个非递减数组。时,返回差值+1就为个数.对应的值相等并且等于。原创 2023-08-06 22:16:15 · 306 阅读 · 0 评论 -
剑指 Offer 03. 数组中重复的数字
在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。利用数据结构特点,容易想到使用哈希表(Set)记录数组的各个数字,当查找到重复数字则直接返回。当 num 在 dic 中,说明重复,直接返回 num;初始化: 新建 HashSet ,记为 dic;将 num 添加至 dic 中;找出数组中重复的数字。原创 2023-07-31 00:10:41 · 126 阅读 · 0 评论 -
剑指 Offer 58 - II. 左旋转字符串
字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。再向 q 添加 “首位至第 n-1 位的字符”;输入: s = "lrloseumgh", k = 6。先向q 添加 “第 n 位至末位的字符”;输入: s = "abcdefg", k = 2。新建一个字符串string,记为 q;输出: "umghlrlose"输出: "cdefgab"原创 2023-07-31 00:10:28 · 94 阅读 · 0 评论 -
剑指 Offer 05. 替换空格
当 s[i] 为空格时:向 res 后依次添加字符"%" "2" "0";当 s[i]不为空格时:向 res 后添加字符 s[i];请实现一个函数,把字符串 s 中的每个空格替换成"%20"。输入:s = "We are happy."输出:"We%20are%20happy."将列表 res 转化为字符串并返回。初始化一个字符串,记为 res;0 <= s 的长度 <= 10000。原创 2023-07-31 00:10:07 · 89 阅读 · 0 评论 -
剑指 Offer 35. 复杂链表的复制
在复杂链表中,每个节点除了有一个 next 指针指向下一个节点,还有一个 random 指针指向链表中的任意节点或者 null。输入:head = [[7,null],[13,0],[11,4],[10,2],[1,0]]输出:[[7,null],[13,0],[11,4],[10,2],[1,0]]输入:head = [[3,null],[3,0],[3,null]]输出:[[3,null],[3,0],[3,null]]输入:head = [[1,1],[2,1]]输出:[[1,1],[2,1]]原创 2023-07-30 10:16:24 · 86 阅读 · 0 评论 -
剑指 Offer 24. 反转链表
定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。输入: 1->2->3->4->5->NULL。输出: 5->4->3->2->1->NULL。考虑遍历链表,并在访问各节点时修改。0原创 2023-07-30 10:15:49 · 46 阅读 · 0 评论 -
剑指 Offer 06. 从尾到头打印链表
链表只能从前至后访问每个节点,而题目要求倒序输出各节点值,这种先入后出的需求可以借助栈来实现。输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。出栈: 将各节点值 pop 出栈,存储于数组并返回。入栈: 遍历链表,将各节点值 push 入栈。0 <= 链表长度 <= 10000。输入:head = [1,3,2]输出:[2,3,1]原创 2023-07-30 10:14:34 · 195 阅读 · 0 评论 -
剑指 Offer 09: 用两个栈实现队列用两个栈实现一个队列
用两个栈实现一个队列。若循环执行 A 元素出栈并添加入栈 B ,直到栈 A 为空,则 A = [] , B = [3,2,1] ,即栈 B 元素为栈 A 元素倒序。否则: 将栈 A 元素全部转移至栈 B 中,实现元素倒序,并返回栈 B 的栈顶元素。利用栈 B 删除队首元素:倒序后,B 执行出栈则相当于删除了 A 的栈底元素,即对应队首元素。当栈 B 不为空: B中仍有已完成倒序的元素,因此直接返回 B 的栈顶元素。因此,可以设计栈 A 用于加入队尾操作,栈 B 用于将元素倒序,从而实现删除队首元素。原创 2023-07-30 07:20:20 · 109 阅读 · 0 评论 -
剑指 Offer 30:包含 min 函数的栈
定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min、push 及 pop 的时间复杂度都是 O(1)。普通栈的 push() 和 pop() 函数的复杂度均为O(1);: 栈 A 用于存储所有元素,保证入栈 push() 函数、出栈 pop() 函数、获取栈顶 top() 函数的正常逻辑。因此,只需设法维护好栈B的元素,使其保持是栈 A 的非严格降序元素的子序列,即可实现 min() 函数的 O(1)复杂度。此时 min() 函数只需返回栈B的栈顶元素即可。原创 2023-07-30 07:19:43 · 270 阅读 · 0 评论