
剑指Offer
剑指Offer
强化学习曾小健
"强化学习曾小健2、强化学习曾小健3、我是机器人曾小健具身"都是该号副号。CSDN全站80强博客、总近480w+浏览。AI生成式技术,计算机博士;llama3、Baichuan2、Qwen、GLM-4等等项目贡献人(ArtificialZeng)。这个博客的主题主要是强化学习技术、AI生成式技术、大模型多模态技术、机器人具身智能控制技术、机器/深度学习论文或科研前沿、GNN图神经网络、神经网络,包括人工神经网络和生物神经网络,及其大脑演化,智能和认知的产生,通用人工智能;
展开
-
栈-剑指 Offer 09. 用两个栈实现队列
class CQueue: def __init__(self): self.A, self.B = [] ,[] def appendTail(self, value): self.A.append(value) def deleteHead(self): if self.B: return self.B.pop() if not self.A: return -1 .原创 2021-08-25 18:07:33 · 187 阅读 · 0 评论 -
栈-剑指 Offer 30. 包含min函数的栈
定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min、push 及 pop 的时间复杂度都是 O(1)。示例:MinStack minStack = new MinStack();minStack.push(-2);minStack.push(0);minStack.push(-3);minStack.min(); --> 返回 -3.minStack.pop();minStack.top(); --> 返回 0原创 2021-08-25 17:42:13 · 167 阅读 · 0 评论 -
2021-08-25剑指 Offer 13. 机器人的运动范围
方法一:深度优先遍历 DFS深度优先搜索: 可以理解为暴力法模拟机器人在矩阵中的所有路径。DFS 通过递归,先朝一个方向搜到底,再回溯至上个节点,沿另一个方向搜索,以此类推。剪枝: 在搜索中,遇到数位和超出目标值、此元素已访问,则应立即返回,称之为 可行性剪枝 。算法解析:递归参数: 当前元素在矩阵中的行列索引 i 和 j ,两者的数位和 si, sj 。终止条件: 当 ① 行列索引越界 或 ② 数位和超出目标值 k 或 ③ 当前元素已访问过 时,返回 00 ,代表不计入可达解。递推工作:标记原创 2021-08-25 14:28:41 · 201 阅读 · 0 评论 -
剑指 Offer 04. 二维数组中的查找
在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。示例:现有矩阵 matrix 如下:[ [1, 4, 7, 11, 15], [2, 5, 8, 12, 19], [3, 6, 9, 16, 22], [10, 13, 14, 17, 24], [18, 21, 23, 26, 30]]给定 target=5,返...原创 2021-08-25 13:53:46 · 160 阅读 · 0 评论 -
剑指 Offer 06. 从尾到头打印链表
输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。示例 1:输入:head = [1,3,2]输出:[2,3,1]class Solution: def reversePrint(self, head: ListNode) -> List[int]: return self.reversePrint(head.next) + [head.val] if head else []class Solution: def.原创 2021-08-25 13:26:33 · 225 阅读 · 0 评论 -
JZ29 最小的K个数 剑指Offer 40
输入整数数组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]class Solution: def getLeastNumbers(self, arr: List[int], k: int) -> List[int]: ...原创 2021-08-25 11:55:15 · 159 阅读 · 0 评论 -
剑指 Offer II 025. 链表中的两数相加
给定两个 非空链表 l1和 l2来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储一位数字。将这两数相加会返回一个新的链表。可以假设除了数字 0 之外,这两个数字都不会以零开头。输入:l1 = [7,2,4,3], l2 = [5,6,4]输出:[7,8,0,7]class Solution: def addTwoNumbers(self, l1, l2): """ :type l1: ListNode :..原创 2021-08-23 17:46:55 · 183 阅读 · 0 评论 -
剑指 Offer II 092. 翻转字符
如果一个由'0' 和 '1'组成的字符串,是以一些 '0'(可能没有 '0')后面跟着一些 '1'(也可能没有 '1')的形式组成的,那么该字符串是单调递增的。我们给出一个由字符 '0' 和 '1'组成的字符串 s,我们可以将任何'0' 翻转为'1'或者将'1'翻转为'0'。返回使 s单调递增的最小翻转次数。示例 1:输入:s = "00110"输出:1解释:我们翻转最后一位得到 00111.class Solution: def m...原创 2021-08-23 17:35:17 · 180 阅读 · 0 评论 -
剑指offer 链表中倒数第k个节点
输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。例如,一个链表有 6 个节点,从头节点开始,它们的值依次是 1、2、3、4、5、6。这个链表的倒数第 3 个节点是值为 4 的节点。示例:给定一个链表: 1->2->3->4->5, 和 k = 2.返回链表 4->5.class Solution: def getKthFromEnd(self, head: ListNode原创 2021-08-23 16:33:17 · 88 阅读 · 0 评论 -
表示数值的字符串 剑指offer
请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。数值(按顺序)可以分成以下几个部分:若干空格一个小数或者整数(可选)一个'e'或'E',后面跟着一个整数若干空格小数(按顺序)可以分成以下几个部分:(可选)一个符号字符('+' 或 '-')下述格式之一:至少一位数字,后面跟着一个点 '.'至少一位数字,后面跟着一个点 '.' ,后面再跟着至少一位数字一个点 '.' ,后面跟着至少一位数字整数(按顺序)可以分成以下几个部分:(可选)一个符号字符...原创 2021-08-23 16:21:45 · 90 阅读 · 0 评论 -
剑指 Offer 11. 旋转数组的最小数字
class Solution: def minArray(self, numbers: List[int]) -> int: left = 0 right = len(numbers) - 1 while left < right: # 取中点 mid = left + (right - left) // 2 # 如果 numbers[mid] > numbe.原创 2021-08-23 15:47:42 · 92 阅读 · 0 评论 -
剑指 Offer 25. 合并两个排序的链表
输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。示例1:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4class Solution: def mergeTwoLists(self, l1: ListNode, l2: ListNode) -> ListNode: head = ListNode(0) first = head ...原创 2021-08-23 15:18:07 · 82 阅读 · 0 评论 -
剑指 Offer 03. 数组中重复的数字
找出数组中重复的数字。在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。示例 1:输入:[2, 3, 1, 0, 2, 5, 3]输出:2 或 3方法1:先进行排序,然后看相邻元素是否相同,时间复杂度O(nlogn)class Solution: def findRepeatNumber(self, nums: List[int]...原创 2021-08-23 14:52:58 · 93 阅读 · 0 评论 -
剑指offerJZ1 二维数组中的查找 C++ python
描述在一个二维数组array中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。[[1,2,8,9],[2,4,9,12],[4,7,10,13],[6,8,11,15]]给定 target= 7,返回true。给定target=3,返回false。0 <=array.length<= 5000 <=a...原创 2021-08-10 13:55:07 · 209 阅读 · 0 评论 -
剑指 Offer 28. 对称的二叉树
请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。例如,二叉树[1,2,2,3,4,4,3] 是对称的。1/ \2 2/ \ / \3 4 4 3但是下面这个[1,2,2,null,3,null,3] 则不是镜像对称的:1/ \2 2\ \3 3示例 1:输入:root = [1,2,2,3,4,4,3]输出:true示例 2:输入:ro...原创 2021-08-10 10:48:46 · 87 阅读 · 0 评论 -
剑指 Offer 04. 二维数组中的查找
在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。示例:现有矩阵 matrix 如下:[ [1, 4, 7, 11, 15], [2, 5, 8, 12, 19], [3, 6, 9, 16, 22], [10, 13, 14, 17, 24], [18, 21, 23, 26, 30]]给定 target=5...原创 2021-08-10 10:37:20 · 98 阅读 · 0 评论 -
剑指 Offer 33. 二叉搜索树的后序遍历序列
Leetcode能过,牛客过不了输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果。如果是则返回true,否则返回false。假设输入的数组的任意两个数字都互不相同。参考以下这颗二叉搜索树: 5 / \ 2 6 / \1 3示例 1:输入: [1,6,3,2,5]输出: false示例 2:输入: [1,3,2,6,5]输出: true提示:数组长度 <= 1000来源:力扣(LeetCode)...原创 2021-08-09 14:24:00 · 163 阅读 · 0 评论