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

摘要:给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。 方法一:动态规划 对于一个子串而言,如果它是回文串,并且长度大于2,那么将它首尾的两个字母去除之后,它仍然是个回文串 用P(i, j)表示字符串s的第i到j个字母组成的串(s[i:j])是否为回文串 P(i, 阅读全文
posted @ 2020-09-06 16:13 LinBupt 阅读(110) 评论(0) 推荐(0)
摘要:给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 输入: [0,1,0,2,1,0,1,3,2,1,2,1] 输出: 6 动态编程-->O(n) O(n) public int trap(int[] height) { if (height == n 阅读全文
posted @ 2020-09-04 09:31 LinBupt 阅读(130) 评论(0) 推荐(0)
摘要:有两个数组a和b, 有两个线程分别读取数组a和数组b,线程1循环打印数组a中的数字,线程2循环打印数组b中的数,要求交叉,要求第一个数组先输出。 import threading #method1:协程 def sol(strs): for s in strs: res = yield s prin 阅读全文
posted @ 2020-09-03 11:06 LinBupt 阅读(265) 评论(0) 推荐(0)
摘要:1114. 按序打印 我们提供了一个类: public class Foo { public void first() { print("first"); } public void second() { print("second"); } public void third() { print( 阅读全文
posted @ 2020-08-31 10:41 LinBupt 阅读(240) 评论(0) 推荐(0)
摘要:实现 strStr() 函数。 给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回 -1。 示例 1: 输入: haystack = "hello", needle = "ll"输 阅读全文
posted @ 2020-08-16 15:57 LinBupt 阅读(124) 评论(0) 推荐(0)
摘要:给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。 示例: s = "leetcode"返回 0 s = "loveleetcode"返回 2 Python class Solution: def firstUniqChar(self, s: str) -> in 阅读全文
posted @ 2020-08-16 14:56 LinBupt 阅读(140) 评论(0) 推荐(0)
摘要:编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。 不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。 你可以假设数组中的所有字符都是 ASCII 码表中的可打印字符。 Python class Solutio 阅读全文
posted @ 2020-08-16 14:38 LinBupt 阅读(105) 评论(0) 推荐(0)
摘要:你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。 给定一个代表每个房屋存放金额的非负整数数组,计算你不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。 示例 阅读全文
posted @ 2020-08-16 14:27 LinBupt 阅读(134) 评论(0) 推荐(0)
摘要:给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。 说明:每次只能向下或者向右移动一步。 示例: 输入:[[1,3,1], [1,5,1], [4,2,1]]输出: 7解释: 因为路径 1→3→1→1→1 的总和最小。 Python class 阅读全文
posted @ 2020-08-16 14:16 LinBupt 阅读(104) 评论(0) 推荐(0)
摘要:给定一个三角形,找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点上。 相邻的结点 在这里指的是 下标 与 上一层结点下标 相同或者等于 上一层结点下标 + 1 的两个结点。 例如,给定三角形: [ [2], [3,4], [6,5,7], [4,1,8,3]]自顶向下的最小路径和为 11 阅读全文
posted @ 2020-08-16 13:48 LinBupt 阅读(161) 评论(0) 推荐(0)
摘要:给定一个无序的整数数组,找到其中最长上升子序列的长度。 示例: 输入: [10,9,2,5,3,7,101,18]输出: 4 解释: 最长的上升子序列是 [2,3,7,101],它的长度是 4。说明: 可能会有多种最长上升子序列的组合,你只需要输出对应的长度即可。你算法的时间复杂度应该为 O(n2) 阅读全文
posted @ 2020-08-16 11:36 LinBupt 阅读(192) 评论(0) 推荐(0)
摘要:给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 示例: 输入: [-2,1,-3,4,-1,2,1,-5,4]输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。进阶: 如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精 阅读全文
posted @ 2020-08-16 10:44 LinBupt 阅读(110) 评论(0) 推荐(0)
摘要:动态规划==》把多阶段过程转化为一系列单阶段问题,利用各阶段之间的关系(状态转移方程),逐个求解 本质==》一个规模比较大的问题(可以用两三个参数表示的问题),可以通过若干规模较小的问题的结果来得到的(通常会寻求到一些特殊的计算逻辑,如求最值等) Python class Solution: def 阅读全文
posted @ 2020-08-16 10:23 LinBupt 阅读(73) 评论(0) 推荐(0)
摘要:给定一个链表,判断链表中是否有环。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。 示例 1: 输入:head = [3,2,0,-4], pos = 1输出:true解释:链表中有一个环,其尾部连接到 阅读全文
posted @ 2020-08-16 10:11 LinBupt 阅读(93) 评论(0) 推荐(0)
摘要:给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。 如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。 您可以假设除了数字 0 之外,这两个数都不会以 0 开头。 示例: 输入:(2 -> 4 -> 阅读全文
posted @ 2020-08-14 09:33 LinBupt 阅读(129) 评论(0) 推荐(0)
摘要:将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例: 输入:1->2->4, 1->3->4输出:1->1->2->3->4->4 Python # Definition for singly-linked list. # class ListNo 阅读全文
posted @ 2020-08-13 15:11 LinBupt 阅读(138) 评论(0) 推荐(0)
摘要:给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。 示例: 给定一个链表: 1->2->3->4->5, 和 n = 2. 当删除了倒数第二个节点后,链表变为 1->2->3->5.说明: 给定的 n 保证是有效的。 进阶: 你能尝试使用一趟扫描实现吗? Python # Defin 阅读全文
posted @ 2020-08-13 11:04 LinBupt 阅读(121) 评论(0) 推荐(0)
摘要:Python class Solution: def convert(self, s: str, numRows: int) -> str: res = ['' for _ in range(numRows)] i = 0 while i < len(s): j = 0 while i < len( 阅读全文
posted @ 2020-08-13 00:01 LinBupt 阅读(140) 评论(0) 推荐(0)
摘要:给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组。 注意:答案中不可以包含重复的三元组。 Python class Solution: def threeSum(self, nums: 阅读全文
posted @ 2020-08-12 23:17 LinBupt 阅读(118) 评论(0) 推荐(0)
摘要:给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。 Go func twoSum(nums []int, target int) []int { m : 阅读全文
posted @ 2020-08-12 22:33 LinBupt 阅读(124) 评论(0) 推荐(0)