随笔分类 -  Data Structures and Algorithms

This part is about data structures and algorithms.
摘要:链接:https://leetcode-cn.com/problems/burst-balloons/ 题目: 有 n 个气球,编号为0 到 n-1,每个气球上都标有一个数字,这些数字存在数组 nums 中, 现在要求戳破所有的气球。每当戳破一个气球 i 时,可以获得 nums[left] * nu 阅读全文
posted @ 2019-11-30 11:19 Latuper 阅读(355) 评论(0) 推荐(0)
摘要:LeetCode链接:https://leetcode-cn.com/problems/merge-intervals/ 题目: 给出一个区间的集合,请合并所有重叠的区间 示例: 输入:[[1, 3], [2, 6], [8, 10], [15, 18]] 输出:[[1, 6], [8, 10], 阅读全文
posted @ 2019-11-18 10:31 Latuper 阅读(509) 评论(0) 推荐(0)
摘要:LeetCode链接:https://leetcode-cn.com/problems/find-first-and-last-position-of-element-in-sorted-array/ 题目: 给定一个按照升序排列的整数数组nums,和一个目标值target,找出给定目标值在数组中的 阅读全文
posted @ 2019-10-30 14:57 Latuper 阅读(475) 评论(0) 推荐(0)
摘要:LeetCode链接:https://leetcode-cn.com/problems/search-in-rotated-sorted-array/ 题目: 假设按照升序排序的数组在某个未知的点上进行了旋转,例如,数组[0, 1, 2, 4, 5, 6, 7]可能变为[4, 5, 6, 7, 0, 阅读全文
posted @ 2019-10-29 09:34 Latuper 阅读(273) 评论(0) 推荐(0)
摘要:LeetCode链接:https://leetcode-cn.com/problems/word-break/ 题目: 给定一个非空字符串s和一个包含非空单词列表的字典wordDict,判定s是否可以被空格拆分为一个或多个在字典中出现的单词; 注: 1、拆分时可以重复使用字典中的单词; 2、可以假设 阅读全文
posted @ 2019-10-24 08:39 Latuper 阅读(584) 评论(0) 推荐(0)
摘要:题目: 合并k个有序链表,返回合并后的有序链表,并分析实现方法的时空复杂度。 我的想法是依次从待排序的链表中选取一个链表和已经排好序的链表进行合并,当没有待排序的链表时,整个合并过程结束 官方题解给出了一种分治方法,可以减少节点比较的次数,将时间复杂度降低为O(Nlogk),点击查看 https:/ 阅读全文
posted @ 2019-10-23 17:09 Latuper 阅读(559) 评论(0) 推荐(0)
摘要:题目: 给出n代表生成括号的对数,请写出一个函数,使其能够生成所有可能的并且有效的括号组合; 官方给出解答是使用回溯法,穷举所有可能的括号组合,并在穷举的过程中判断每一个组合的有效性,这道题判断括号组合有效性的特殊性在于,这个括号组合只包含一种类型的括号,如 '(' 和 ')' ,所以可以通过计算左 阅读全文
posted @ 2019-10-23 14:29 Latuper 阅读(369) 评论(0) 推荐(0)
摘要:题目: 给定一个只包括'(',')','[',']','{','}'的字符串,判断字符串是否有效; 有效字符串需满足: 1、左括号必须用相同类型的右括号闭合 2、左括号必须以正确的顺序闭合 3、空字符串可认为是有效字符串 看到括号匹配就想到可能要用到栈,所以提交的代码是: 官方题解也是用到栈,思想是 阅读全文
posted @ 2019-10-23 13:15 Latuper 阅读(269) 评论(0) 推荐(0)
摘要:题目描述: 给定一个仅包含数字2-9的字符串,返回所有它所能表示的字母组合,给出数字到字母的映射如下: 2 :abc" 3 :"def" 4 :"ghi" 5 :"jkl" 6 :"mno" 7 :"pqrs" 8 :"tuv" 9 :"wxyz" 以下是官方给的题解: 其中第49行有两种判断方法, 阅读全文
posted @ 2019-10-22 11:00 Latuper 阅读(273) 评论(0) 推荐(0)
摘要:【题目】 给定一个无序的整型数组arr,找到其中最小的k个数 【要求】 如果数组arr的长度为N,排序之后自然可以得到最小的k个数,此时时间复杂度与排序的时间复杂度相同,均为O(NlogN),请实现时间复杂度为O(Nlogk)的方法 来源:左程云老师《程序员代码面试指南》 阅读全文
posted @ 2019-06-13 21:01 Latuper 阅读(230) 评论(0) 推荐(0)
摘要:【题目】 定义局部最小的概念:arr长度为1时,arr[0]是局部最小;arr的长度为N(N > 1)时,如果arr[0] < arr[1],那么arr[0]是局部最小,如果arr[N - 1] < arr[N - 2],那么arr[N - 1]是局部最小;如果0<i<N-1,既有arr[i] < 阅读全文
posted @ 2019-06-13 19:15 Latuper 阅读(242) 评论(0) 推荐(0)
摘要:【题目】 一个环形单链表从头节点head开始不降序,同时由最后的节点指回头节点。给定这样一个环形单链表的头节点head和一个整数num,请生成节点值为num的新节点,并插入到这个环形链表中,保证调整后的链表依然有序 来源:左程云老师《程序员代码面试指南》 阅读全文
posted @ 2019-06-13 18:54 Latuper 阅读(208) 评论(0) 推荐(0)
摘要:【题目】 一个栈中元素的类型为整型,现在想将该栈从顶到底按从大到小的顺序排序,只许申请一个栈。除此之外,可以申请新的变量,但不能申请额外的数据结构。如何完成排序? 来源:左程云老师《程序员代码面试指南》 阅读全文
posted @ 2019-06-13 17:06 Latuper 阅读(140) 评论(0) 推荐(0)
摘要:【题目】 给定一个整型矩阵matrix,请按照转圈的方式打印它 例如,1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 打印结果为:1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10 【要求】 额外空间复杂度为O(1) 来源:左程云老师《程序员代 阅读全文
posted @ 2019-06-12 21:24 Latuper 阅读(331) 评论(0) 推荐(0)
摘要:【题目】 给定链表的头节点head,实现删除链表的中间节点的函数 例如:1,不删除任何节点; 1->2,删除节点1; 1->2->3,删除节点2; 1->2->3->4,删除节点2; 1->2->3->4->5,删除节点3; 【总结】 【题目】 给定链表的头节点head、整数a和b,实现删除位于a/ 阅读全文
posted @ 2019-06-12 20:27 Latuper 阅读(201) 评论(0) 推荐(0)
摘要:【题目】 一棵二叉树原本是搜索二叉树,但是其中有两个节点调换了位置,使得这棵二叉树不再是搜索二叉树,请找到这两个错误节点并返回。已知二叉树中所有的节点值都不一样,给定二叉树的头节点head,返回一个长度为2的二叉树节点类型的数组errs,errs[0]表示一个错误节点,errs[1]表示另一个错误节 阅读全文
posted @ 2019-06-11 21:22 Latuper 阅读(555) 评论(0) 推荐(0)
摘要:【题目】 给定一个N×M的整型矩阵matrix和一个整数K,matrix的每一行和每一列都是排好序的。实现一个函数,判断K是否在matrix中 例如, 0 1 2 5 2 3 4 7 4 4 4 8 5 7 7 9 如果K为7,返回true;如果K为6,返回false; 【要求】 时间复杂度为O(N 阅读全文
posted @ 2019-06-09 21:04 Latuper 阅读(210) 评论(0) 推荐(0)
摘要:【题目】 给定一个字符串str,判断是不是整体有效的括号字符串 举例,str = "()",返回true;str = "(()())",返回true;str = "(())",返回true; str = "())",返回false;str = "()(",返回false;str = "()a()", 阅读全文
posted @ 2019-06-09 19:45 Latuper 阅读(356) 评论(0) 推荐(0)
摘要:【题目】 给定一个N×N矩阵matrix,把这个矩阵调整成顺时针转动90°后的形式 例如, 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 顺时针转动90°后为: 13 9 5 1 14 10 6 2 15 11 7 3 16 12 8 4 【要求】 时间复杂度为O(1 阅读全文
posted @ 2019-06-08 20:47 Latuper 阅读(220) 评论(0) 推荐(0)
摘要:【题目】 给定一个单链表的头节点head,链表长度为N,如果N为偶数,那么前N/2个节点算作左半区,后N/2个节点算作右半区;如果N为奇数,那么前N/2个节点算作左半区,后N/2+1个节点算作右半区。 左半区从左到右依次记为L1 -> L2 -> ...,右半区从左到右依次记为R1 -> R2 -> 阅读全文
posted @ 2019-06-08 19:27 Latuper 阅读(257) 评论(0) 推荐(0)