数据结构
个人学习
星辰丨致青春
不忘初心,砥砺前行!
展开
-
盛水最多的容器(Python+Go)
有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i])。每移动一步,左右距离必定减小:如果移动较长的那块板,(l - r)必定会减小,所以area减小;解释:图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。双指针分别指向数组左右边界,需要确定指针如何移动:“短板效应”中,盛最多的水,取决于最小的那块板。容积 = min( height [指针右],height [指针左]) * (指针左 - 指针右).输入:[1,8,6,2,5,4,8,3,7]原创 2024-02-01 16:35:17 · 267 阅读 · 0 评论 -
最大子数组和(Python)
给一个整数数组 nums ,请找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。子数组是数组中的一个连续部分。示例 1:输入:nums = [-2,1,-3,4,-1,2,1,-5,4]输出:6解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。示例 2:输入:nums = [1]输出:1示例 3:输入:nums = [5,4,-1,7,8]输出:23动态规划:1、确定dp数组(dp table)以及下标的含义原创 2022-02-09 10:57:37 · 2481 阅读 · 0 评论 -
合并两个有序链表(Python)
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 -100 <= Node.val <= 100输入:l1 = [1,2,4], l2 = [1,3,4]输出:[1,1,2,3,4,4]示例 2:输入:l1 = [], l2 = []输出:[]示例 3:输入:l1 = [], l2 = [0]输出:[0]思路一:对两个链表进行迭代,判断 l1 和 l2 哪一个链表的节点的值更小,将较小值的节点添加到结果链表里,当一个原创 2022-01-28 10:13:42 · 4949 阅读 · 0 评论 -
整数转罗马数字 + 逆向(Python)
罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。字符数值I1V5X10L50C100D500M1000例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 XX + V + II 。通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做 IIII,而是 IV。数字 1 在数字 5 的左边,所表示的数等于大数原创 2022-01-27 15:31:56 · 956 阅读 · 0 评论 -
整数反转(Python)
给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。假设环境不允许存储 64 位整数(有符号或无符号)。示例 1:输入:x = 123输出:321示例 2:输入:x = -123输出:-321示例 3:输入:x = 120输出:21示例 4:输入:x = 0输出:0思路一:将有符号整数转换为字符串,去除符号位,反转字符串,再转换为整数(注意原有原创 2022-01-27 11:22:41 · 5836 阅读 · 0 评论 -
Z 字形变换(Python)
将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行 Z 字形排列。比如输入字符串为 “PAYPALISHIRING” 行数为 3 时,排列如下:之后,输出需要从左往右逐行读取,产生出一个新的字符串,比如:“PAHNAPLSIIGYIR”。示例 1:输入:s = “PAYPALISHIRING”, numRows = 3输出:“PAHNAPLSIIGYIR”示例 2:输入:s = “PAYPALISHIRING”, numRows = 4输出:“PINAL原创 2022-01-26 18:06:44 · 789 阅读 · 0 评论 -
最长回文子串(Python)
给一个字符串 s,找到 s 中最长的回文子串。示例 1:输入:s = “babad”输出:“bab”解释:“aba” 同样是符合题意的答案。示例 2:输入:s = “cbbd”输出:“bb”示例 3:输入:s = “a”输出:“a”示例 4:输入:s = “ac”输出:“a”思路一:中心扩散,如果两边的字母相同,就可以继续扩展;如果两边的字母不同,就停止扩展。class Solution: def longestPalindrome(self,s):原创 2022-01-26 10:26:43 · 4954 阅读 · 4 评论 -
无重复字符的最长子串(Python)
给定一个字符串 s ,找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: s = “abcabcbb”输出: 3解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。示例 2:输入: s = “bbbbb”输出: 1解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。示例 3:输入: s = “pwwkew”输出: 3解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。答案必须是子串的长度,“pwke” 是一个子序列,不是子串原创 2022-01-24 11:14:32 · 5875 阅读 · 0 评论 -
存在重复元素 II(Python)
一个整数数组 nums 和一个整数 k ,判断数组中是否存在两个 不同的索引 i 和 j ,满足 nums[i] == nums[j] 且 abs(i - j) <= k 。如果存在,返回 true ;否则,返回 false 。示例 1:输入:nums = [1,2,3,1], k = 3输出:true示例 2:输入:nums = [1,0,1,1], k = 1输出:true示例 3:输入:nums = [1,2,3,1,2,3], k = 2输出:false思路一:原创 2022-01-21 12:12:18 · 654 阅读 · 0 评论 -
两数相加(Python + Java)
给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。将两个数相加,并以相同形式返回一个表示和的链表。假设除了数字 0 之外,这两个数都不会以 0 开头。输入:l1 = [2,4,3], l2 = [5,6,4]输出:[7,0,8]解释:342 + 465 = 807.示例2:输入:l1 = [9,9,9,9,9,9,9],l2 = [9,9,9,9]输出:[8,9,9,9,0,0,0,1]思路:依次相加即可,注意原创 2022-01-19 17:15:27 · 861 阅读 · 0 评论 -
两数之和(Python + Java)
给定一个整数数组 nums 和一个整数目标值 target,在该数组中找出和为目标值 target 的那两个整数,并返回它们的数组下标。可假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。可以按任意顺序返回答案。示例 1:输入:nums = [2,7,11,15], target = 9输出:[0,1] 解释:nums[0] + nums[1] ==9 ,返回 [0, 1] 。原创 2022-01-17 10:21:55 · 576 阅读 · 0 评论 -
最长公共前缀(Python + Java)
编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 “”。输入:strs = [“flower”,“flow”,“flight”]输出:“fl”原创 2022-01-14 22:35:05 · 366 阅读 · 0 评论 -
合并两个有序数组(Java + Python)
给定两个有序数组arr1和arr2,将两个数组合并成一个有序数组。arr1 = [1, 3, 5]arr2 = [2, 4, 8, 9]输出:[1, 2, 3, 4, 5, 8, 9]思路:1、合并后排序,都能想到的。(不采用)2、两个数组都是有序的,按顺序比较大小即可。可用类似归并排序的思路,声明两个数组索引指针,分别遍历两个数组,比较值的大小,将较大(小)的值放到目标数组中,继续遍历。Java:public static void main(String[] arg){原创 2021-11-16 21:01:03 · 1627 阅读 · 0 评论 -
数据结构——DFS、BFS思路与对比
深度优先搜索是一种在开发爬虫早期使用较多的方法。它的目的是要达到被搜索结构的叶结点(即那些不包含任何超链的HTML文件) 。宽度优先搜索算法(又称广度优先搜索)是最简便的图的搜索算法之一,这一算法也是很多重要的图的算法的原型。原创 2020-05-21 18:41:32 · 258 阅读 · 0 评论