算法题、数据库题、设计类题等
文章平均质量分 65
数据结构和算法相关的联系题
青w韵
这个作者很懒,什么都没留下…
展开
-
剑指offer32-II:从上到下打印二叉树
从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。当看到这个题目,我的第一反应是递归。第二反应就是BFS。也就是DFS和BFS。DFS需要保存树的深度信息,BFS使用队列来完成。// 二叉树信息/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode原创 2020-07-10 16:59:23 · 264 阅读 · 0 评论 -
二叉树三种遍历
前序遍历和中序遍历通过指针指向树的各个节点,不为空则放入栈,等待后续遍历,指针每次遍历左边节点,再遍历右边节点。相当于 1 2 34 5 6 7执行// 结点栈:null// 第一次弹出,加入到结点栈1// 加入到结果集1// p 指向左结点p = 2// 以此类推// 结点栈4 5 2 1// 结果集1 2 4 5// p 指向空这时候,弹出4p 指向5// 以此遍历public List<Integer&原创 2020-08-09 11:39:40 · 110 阅读 · 0 评论 -
剑指 Offer 20. 表示数值的字符串
题目请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100"、“5e2”、"-123"、“3.1416”、“0123"都表示数值,但"12e”、“1a3.14”、“1.2.3”、“±5”、"-1E-16"及"12e+5.4"都不是。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/biao-shi-shu-zhi-de-zi-fu-chuan-lcof著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。原创 2020-07-15 16:44:04 · 102 阅读 · 0 评论 -
剑指 Offer 67. 把字符串转换成整数
题目写一个函数 StrToInt,实现把字符串转换成整数这个功能。不能使用 atoi 或者其他类似的库函数。首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。当我们寻找到的第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字组合起来,作为该整数的正负号;假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成整数。该字符串除了有效的整数部分之后也可能会存在多余的字符,这些字符可以被忽略,它们对于函数不应该造成影响。注意:假如该字符串中的第一原创 2020-07-16 07:20:19 · 204 阅读 · 0 评论 -
链表算法操作5大经典集合
链表反转定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/fan-zhuan-lian-biao-lcof著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。解题直接将链表看成两部分,一部分是原创 2020-08-02 09:52:03 · 265 阅读 · 0 评论 -
剑指offer24:反转链表
题目定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL限制:0 <= 节点个数 <= 5000来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/fan-zhuan-lian-biao-lcof著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请原创 2020-07-12 17:50:18 · 106 阅读 · 0 评论 -
剑指offer29. 顺时针打印矩阵
剑指 Offer 29. 顺时针打印矩阵输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。示例 1:输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]输出:[1,2,3,6,9,8,7,4,5]示例 2:输入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]输出:[1,2,3,4,8,12,11,10,9,5,6,7]限制:0 <= matrix.length <= 1000 <= matr原创 2020-08-18 15:26:20 · 121 阅读 · 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,返回 true。给定 ta原创 2020-07-10 21:22:54 · 116 阅读 · 0 评论 -
约瑟夫环序列(圆圈中最后剩下的数字)
约瑟夫环序列给定一个数组arr,指定一个起始位置start开始计数(start从1开始计数),计数到m便删除这个数,求删除的序列。例如:arr = {10, 7, 3, 5, 6, 2, 9}, start = 1, m = 3输出{3, 2, 7, 9, 6, 10, 5};整体的思路,因为整体问题类似于环形,所以可以使用模拟循环链表的方式解决。由于删除多,查找少,选择链表数据结构每次从当前位置向后偏移m个位置之后删除节点,又因为是环状,所以需要取余长度,保证要删除的序号在链表长度之间。原创 2020-11-01 16:48:24 · 510 阅读 · 0 评论 -
剑指offer31.栈的压入、弹出序列
栈的压入、弹出序列输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如,序列 {1,2,3,4,5} 是某栈的压栈序列,序列 {4,5,3,2,1} 是该压栈序列对应的一个弹出序列,但 {4,3,5,1,2} 就不可能是该压栈序列的弹出序列。示例 1:输入:pushed = [1,2,3,4,5], popped = [4,5,3,2,1]输出:true解释:我们可以按以下顺序执行:push(1), push(2), push(3原创 2020-10-05 10:47:59 · 95 阅读 · 0 评论 -
剑指offer35 复杂链表的赋值
文章目录剑指offer35 复杂链表的赋值题目时间复杂度 + 运行效果解题思路解题过程剑指offer35 复杂链表的赋值题目请实现 copyRandomList 函数,复制一个复杂链表。在复杂链表中,每个节点除了有一个 next 指针指向下一个节点,还有一个 random 指针指向链表中的任意节点或者 null。示例 1:输入:head = [[7,null],[13,0],[11,4],[10,2],[1,0]]输出:[[7,null],[13,0],[11,4],[10,2],[1,0]]原创 2021-06-06 15:00:55 · 159 阅读 · 0 评论 -
面试题 02.07. 链表相交
题目给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回 null 。图示两个链表在节点 c1 开始相交:题目数据 保证 整个链式结构中不存在环。注意,函数返回结果后,链表必须 保持其原始结构 。进阶:你能否设计一个时间复杂度 O(n) 、仅用 O(1) 内存的解决方案?来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/intersection-of-two-linked-原创 2022-02-13 12:21:50 · 298 阅读 · 0 评论 -
剑指offer40最小的k个数
最小的k个数输入整数数组 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]限制:0 <= k <= arr.length <= 100000 <= arr[i] <= 10000来源:力扣(LeetCode)链接:http原创 2020-10-05 16:02:29 · 71 阅读 · 0 评论 -
程序员面试金典:面试题 01.02. 判定是否互为字符重排
文章目录题目简化思路伪代码直接使用Map使用数组模拟哈希表Java代码直接使用Map使用数组模拟哈希表题目给定两个字符串 s1 和 s2,请编写一个程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串。示例 1:输入: s1 = “abc”, s2 = “bca”输出: true示例 2:输入: s1 = “abc”, s2 = “bad”输出: false说明:0 <= len(s1) <= 1000 <= len(s2) <= 100来源:力扣(原创 2022-01-03 15:48:10 · 486 阅读 · 0 评论 -
力扣200.岛屿数量 DFS题解
目录岛屿数量解题思路岛屿数量给你一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。此外,你可以假设该网格的四条边均被水包围。示例 1:输入:grid = [[“1”,“1”,“1”,“1”,“0”],[“1”,“1”,“0”,“1”,“0”],[“1”,“1”,“0”,“0”,“0”],[“0”,“0”,“0”,“0”,“0”]]输出:1示例 2:输入:grid = [原创 2020-11-08 21:12:51 · 383 阅读 · 0 评论 -
剑指 Offer 36. 二叉搜索树与双向链表
文章目录题目分析思路分析整理题解递归解法非递归解法题目输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的循环双向链表。要求不能创建任何新的节点,只能调整树中节点指针的指向。为了让您更好地理解问题,以下面的二叉搜索树为例:我们希望将这个二叉搜索树转化为双向循环链表。链表中的每个节点都有一个前驱和后继指针。对于双向循环链表,第一个节点的前驱是最后一个节点,最后一个节点的后继是第一个节点。下图展示了上面的二叉搜索树转化成的链表。“head” 表示指向链表中有最小元素的节点。特别地,我们希望可以就地原创 2021-06-19 11:56:40 · 154 阅读 · 0 评论 -
程序员面试金典:面试题 01.01. 判定字符是否唯一
题目实现一个算法,确定一个字符串 s 的所有字符是否全都不同。示例 1:输入: s = “leetcode”输出: false示例 2:输入: s = “abc”输出: true限制:0 <= len(s) <= 100如果你不使用额外的数据结构,会很加分。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/is-unique-lcci著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。题目简化输入:原创 2022-01-02 21:03:33 · 170 阅读 · 0 评论 -
Subarray with given sum
本题链接Given an unsorted array A of size N of non-negative integers, find a continuous sub-array which adds to a given number S.Input:The first line of input contains an integer T denoting the number ...原创 2020-04-01 20:24:52 · 567 阅读 · 0 评论 -
程序员面试金典:面试题 01.03. URL化
文章目录题目简化思路代码题目URL化。编写一种方法,将字符串中的空格全部替换为%20。假定该字符串尾部有足够的空间存放新增字符,并且知道字符串的“真实”长度。(注:用Java实现的话,请使用字符数组实现,以便直接在数组上操作。)示例 1:输入:"Mr John Smith ", 13输出:“Mr%20John%20Smith”示例 2:输入:" “, 5输出:”%20%20%20%20%20"提示:字符串长度在 [0, 500000] 范围内。来源:力原创 2022-01-03 17:00:01 · 735 阅读 · 0 评论 -
剑指offer :删除链表的结点 && 包含min的栈
删除链表的节点给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。返回删除后的链表的头节点。注意:此题对比原题有改动示例 1:输入: head = [4,5,1,9], val = 5输出: [4,1,9]解释: 给定你链表中值为 5 的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9.示例 2:输入: head = [4,5,1,9], val = 1输出: [4,5,9]解释: 给定你链表中值为 1 的第三个节点,那么在调用了你原创 2020-10-04 23:29:50 · 100 阅读 · 0 评论 -
力扣数据库题目595,596,620,627
595 力扣596题SQL架构这里有张 World 表±----------------±-----------±-----------±-------------±--------------+| name | continent | area | population | gdp |±----------------...原创 2019-10-16 21:10:38 · 359 阅读 · 0 评论 -
力扣数据库题181-184和197
181Employee 表包含所有员工,他们的经理也属于员工。每个员工都有一个 Id,此外还有一列对应员工的经理的 Id。±—±------±-------±----------+| Id | Name | Salary | ManagerId |±—±------±-------±----------+| 1 | Joe | 70000 | 3 || 2 ...原创 2019-10-15 23:40:07 · 317 阅读 · 0 评论 -
牛客网sql刷题(一)查找最晚入职员工的所有信息。查找入职员工时间排名倒数第三的员工所有信息。
使用语言:mysql查找最晚入职员工的所有信息。我们需要使用子查询,先查找出最晚的入职日期,再挑选所有符合该日期的员工(可能有多个员工都是最晚入职。)select * from employees where hire_date = ( select max(hire_date) from employees);查找入职员工时间排名倒数第三的员工所有信息。个人当时将...原创 2019-11-04 21:35:34 · 756 阅读 · 1 评论 -
数组中重复的数字,简单分析
题目找出数组中重复的数字。在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。示例 1:输入:[2, 3, 1, 0, 2, 5, 3]输出:2 或 3限制:2 <= n <= 100000来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/shu-zu-zhong-zhong-fu-de-sh原创 2020-05-27 21:45:38 · 202 阅读 · 0 评论 -
力扣第4题寻找两个有序数组的中位数个人题解
题目给定两个大小为 m 和 n 的有序数组 nums1 和 nums2。请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n))。你可以假设 nums1 和 nums2 不会同时为空。示例 1:nums1 = [1, 3]nums2 = [2]则中位数是 2.0示例 2:nums1 = [1, 2]nums2 = [3, 4]则中位数是 ...原创 2019-08-21 10:25:11 · 747 阅读 · 0 评论 -
力扣第N高的薪水
编写一个 SQL 查询,获取 Employee 表中第二高的薪水(Salary)±—±-------+| Id | Salary |±—±-------+| 1 | 100 || 2 | 200 || 3 | 300 |±—±-------+例如上述 Employee 表,SQL查询应该返回 200 作为第二高的薪水。如果不存在第二高的薪水,那么查询应返回...原创 2019-10-12 17:07:53 · 183 阅读 · 0 评论 -
力扣第3题个人题解
题目给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: “abcabcbb”输出: 3解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。示例 2:输入: “bbbbb”输出: 1解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。示例 3:输入: “pwwkew”输出: 3解释: 因为无重复字符的最长子串是 “wk...原创 2019-08-19 18:13:11 · 679 阅读 · 0 评论 -
力扣第2题两数相加
给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -&g...原创 2019-08-18 17:00:07 · 235 阅读 · 0 评论 -
二分查找,插入排序,归并排序三者练习,加上泛型
由于最近在学习数据结构和算法之美时用到了一些排序和查找的算法,所以在这块列出。以下示例皆为Java代码,文中由于顺带练习泛型所以写了基于泛型泛型的代码,纯粹就是分享一下,希望专注于算法本身的去下面的网站看就好了,有图解,有代码、顺便练练英语以下图片来自 geeksforgeeks二分查找binary-search就像我们平时猜数一样,一堆数组,我们要查一个数,我们先找到数组的中间元...原创 2019-11-17 20:40:19 · 156 阅读 · 0 评论 -
数据结构和算法之美专栏练习1之动态数组和有序数组
问题实现一个支持动态扩容的数组实现一个大小固定的有序数组,支持动态增删改操作实现两个有序数组合并为一个有序数组简单总结首先练习了基本的数组动态数组没涉及到什么算法,应该是让我们纯粹练手的,因为自己设计,所以每次扩容至当前数组大小的2倍(显然不合理,后续会改进,不过也算是实现了动态扩容)。有序数组涉及到的简单算法:二分查找、插入排序。将两个有序数组合并为一个有序数组:归并排序的...原创 2019-11-14 22:10:53 · 294 阅读 · 0 评论