随笔分类 -  数据结构与算法

摘要:地上有一个m行n列的方格,从坐标 [0,0] 到坐标 [m-1,n-1] 。 一个机器人从坐标 [0, 0] 的格子开始移动,它每次可以向左、右、上、下移动一格(不能移动到方格外),也不能进入行坐标和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人能够进入方格 [35, 37] ,因为3+ 阅读全文
posted @ 2021-07-26 23:42 Vincent-yuan 阅读(39) 评论(0) 推荐(0) 编辑
摘要:给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。 例 阅读全文
posted @ 2021-07-21 23:01 Vincent-yuan 阅读(47) 评论(0) 推荐(0) 编辑
摘要:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。 例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转,该数组的最小值为1。 示例 1: 输入:[3,4,5,1,2] 输出:1 题解: 二分查找法 由 阅读全文
posted @ 2021-06-28 23:22 Vincent-yuan 阅读(46) 评论(0) 推荐(0) 编辑
摘要:一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。 求该青蛙跳上一个 n 级的台阶总共有多少种跳法。 答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。 示例 1: 输入:n = 2 输出:2 示例 2: 输入:n = 0 输出:1 提示: 0 < 阅读全文
posted @ 2021-06-28 22:10 Vincent-yuan 阅读(64) 评论(0) 推荐(0) 编辑
摘要:写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项(即 F(N))。 斐波那契数列的定义如下: F(0) = 0, F(1) = 1 F(N) = F(N - 1) + F(N - 2), 其中 N > 1. 斐波那契数列由 0 和 1 开始,之后的斐波那契数就是由之前的两数相 阅读全文
posted @ 2021-06-28 00:07 Vincent-yuan 阅读(40) 评论(0) 推荐(0) 编辑
摘要:用两个栈实现一个队列。 队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead , 分别完成在队列尾部插入整数和在队列头部删除整数的功能。 (若队列中没有元素,deleteHead 操作返回 -1 ) 示例 1: 输入:["CQueue","appendTail","de 阅读全文
posted @ 2021-06-27 23:27 Vincent-yuan 阅读(44) 评论(0) 推荐(0) 编辑
摘要:输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。 假设输入的前序遍历和中序遍历的结果中都不含重复的数字。 例如,给出 前序遍历 preorder = [3,9,20,15,7] 中序遍历 inorder = [9,3,15,20,7] 返回如下的二叉树: 3 / \ 9 20 / \ 15 阅读全文
posted @ 2021-06-27 22:59 Vincent-yuan 阅读(38) 评论(0) 推荐(0) 编辑
摘要:输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。 示例 1: 输入:head = [1,3,2] 输出:[2,3,1] 限制: 0 <= 链表长度 <= 10000 题解: 使用栈,后进先出的特点。 从链表头开始,依次将节点入栈,然后依次弹出栈内元素并存储到数组中。 创建一个栈, 阅读全文
posted @ 2021-06-24 22:38 Vincent-yuan 阅读(31) 评论(0) 推荐(0) 编辑
摘要:请实现一个函数,把字符串 s 中的每个空格替换成"%20"。 示例 1: 输入:s = "We are happy." 输出:"We%20are%20happy." 限制: 0 <= s 的长度 <= 10000 题解: public static void main(String[] args) 阅读全文
posted @ 2021-06-22 22:22 Vincent-yuan 阅读(43) 评论(0) 推荐(0) 编辑
摘要:在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。 请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 示例: 现有矩阵 matrix 如下: [ [1, 4, 7, 11, 15], [2, 5, 8, 12, 阅读全文
posted @ 2021-06-22 21:56 Vincent-yuan 阅读(33) 评论(0) 推荐(0) 编辑
摘要:找出数组中重复的数字。 在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。 数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。 请找出数组中任意一个重复的数字。 示例 1: 输入: [2, 3, 1, 0, 2, 5, 3] 输出:2 或 3 限 阅读全文
posted @ 2021-06-15 23:41 Vincent-yuan 阅读(49) 评论(0) 推荐(0) 编辑
摘要:给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的数字可以无限制重复被选取。 说明: 所有数字(包括 target)都是正整数。 解集不能包含重复的组合。 示例 1: 输入 阅读全文
posted @ 2021-04-13 23:17 Vincent-yuan 阅读(134) 评论(0) 推荐(0) 编辑
摘要:给定一个正整数 n ,输出外观数列的第 n 项。 「外观数列」是一个整数序列,从数字 1 开始,序列中的每一项都是对前一项的描述。 你可以将其视作是由递归公式定义的数字字符串序列: countAndSay(1) = "1" countAndSay(n) 是对 countAndSay(n-1) 的描述 阅读全文
posted @ 2021-04-12 23:46 Vincent-yuan 阅读(88) 评论(0) 推荐(0) 编辑
摘要:编写一个程序,通过填充空格来解决数独问题。 一个数独的解法需遵循如下规则: 数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。空白格用 '.' 表示。 解析: 可以考虑使用行优先的顺序依次枚举每一个空白格中填的数字 阅读全文
posted @ 2021-04-07 22:31 Vincent-yuan 阅读(114) 评论(0) 推荐(0) 编辑
摘要:剑指offer 剑指 Offer 03. 数组中重复的数字 ,剑指 Offer 04. 二维数组中的查找 剑指 Offer 05. 替换空格 , 剑指 Offer 06. 从尾到头打印链表 , 剑指 Offer 07. 重建二叉树 , 剑指 Offer 09. 用两个栈实现队列 , 剑指 Offer 阅读全文
posted @ 2021-04-06 23:27 Vincent-yuan 阅读(123) 评论(0) 推荐(0) 编辑
摘要:判断一个 9x9 的数独是否有效。只需要根据以下规则,验证已经填入的数字是否有效即可。 数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。 数独部分空格内已填入了数字,空白格用 '.' 表示。 示例 1: 输入:[ 阅读全文
posted @ 2021-04-06 22:51 Vincent-yuan 阅读(148) 评论(0) 推荐(1) 编辑
摘要:给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 你可以假设数组中无重复元素。 示例 1: 输入: [1,3,5,6], 5 输出: 2 解析: 方法一: 使用for循环从小到大遍历,考虑边界值(位置为0和位置为len)。 只要 阅读全文
posted @ 2021-04-06 21:50 Vincent-yuan 阅读(81) 评论(0) 推荐(0) 编辑
摘要:给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。 如果数组中不存在目标值 target,返回 [-1, -1]。 进阶: 你可以设计并实现时间复杂度为 O(log n) 的算法解决此问题吗? 示例 1: 输入:nums = [5,7, 阅读全文
posted @ 2021-03-24 23:33 Vincent-yuan 阅读(126) 评论(0) 推荐(0) 编辑
摘要:整数数组 nums 按升序排列,数组中的值 互不相同 。 在传递给函数之前,nums 在预先未知的某个下标 k(0 <= k < nums.length)上进行了 旋转,使数组变为 [nums[k], nums[k+1], ..., nums[n-1], nums[0], nums[1], ..., 阅读全文
posted @ 2021-03-24 23:02 Vincent-yuan 阅读(54) 评论(0) 推荐(0) 编辑
摘要:给你一个只包含 '(' 和 ')' 的字符串,找出最长有效(格式正确且连续)括号子串的长度。 示例: 输入:s = ")()())" 输出:4 解释:最长有效括号子串是 "()()" 解析: 方法一:动态规则 我们定义dp[i] 表示以下标 i 结尾的最长有效括号的长度。 将dp数组全初始化为0. 阅读全文
posted @ 2021-03-23 23:02 Vincent-yuan 阅读(218) 评论(0) 推荐(0) 编辑