数据结构与算法
文章平均质量分 67
LouisC7
末流985、二流港硕底层学渣一枚。
展开
-
22.Jan.14 多路归并合集
(1) 21. 合并两个有序链表(易)将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。输入:1->2->4, 1->3->4输出:1->1->2->3->4->4思路: 遍历两个链表,谁小要谁class Solution: def mergeTwoLists(self, l1: ListNode, l2: ListNode) -> ListNode: if not l原创 2022-01-14 13:06:46 · 122 阅读 · 1 评论 -
Oct.2-3 数字转换为十六进制数(简单)& 分数到小数(中等)
405. 数字转换为十六进制数思路Python中的//运算取整除:向下取接近商的整数,负数 // 正数 的最小值为1。而 %取模运算返回整除的余数 (余数 = 被除数 - 除数 * 商)。注意这两点就可以较容易解出。# pythonclass Solution: def toHex(self, num: int) -> str: CONV = "0123456789abcdef" ans = [] # 32位2进制数,转换成16进制 -原创 2021-10-04 10:29:40 · 205 阅读 · 0 评论 -
Sep.24 0-1背包问题
两只队伍分物资这里有一堆物资待分配,物资总数量不超过200(0<m≤200)(0<m≤200)(0<m≤200),每件物资重量不超过100(0<m≤100)(0<m≤100)(0<m≤100)。请问是否可以将这堆物资分配给两个队伍,使得两个队伍的全部的物资重量和相等。示例1输入[1, 5, 11, 5]输出true—说明数组可以分为 [1, 5, 5] 和 [11]示例2输入[1, 2, 3, 5]输出false思路# python原创 2021-09-23 18:42:37 · 148 阅读 · 0 评论 -
Sep.14-20 从双倍数组中还原原数组(中等)& 分隔链表(中等)
2007. 从双倍数组中还原原数组思路排序+哈希表计数# python3class Solution: def findOriginalArray(self, changed: List[int]) -> List[int]: l = len(changed) if l % 2 == 1: return [] dic = dict() res = list() changed.so原创 2021-09-23 11:20:50 · 141 阅读 · 0 评论 -
Sep.20-23 【dp】出租车的最大盈利(中等)& 礼物的最大价值(中等) & 把数字翻译成字符串(中等)
动态规划专题2008. 出租车的最大盈利提示:1 <= n <= 1051 <= rides.length <= 3 * 104rides[i].length == 31 <= starti < endi <= n1 <= tipi <= 105思路定义 dp[i]dp[i]dp[i] 表示行驶到 iii 时的最大盈利。考虑状态转移,一方面,我们可以不接终点为 iii 的乘客,这样有 dp[i]=dp[i−1]dp[i] = dp原创 2021-09-23 11:12:15 · 144 阅读 · 0 评论 -
Sep.17 密码验证合格程序(困难)
描述密码要求:长度超过8位包括大小写字母.数字.其它符号,以上四种至少三种不能有相同长度大于2的子串重复输入描述:一组或多组长度超过2的字符串。每组占一行输出描述:如果符合要求输出:OK,否则输出NG示例1输入:021Abc9000021Abc9Abc1021ABC9000021$bc9000输出:OKNGNGOKdef checkLegal(pswd): if len(pswd) <= 8:return False原创 2021-09-17 13:29:48 · 89 阅读 · 0 评论 -
Sep.3 复杂链表的复制(中等)
剑指 Offer 35. 复杂链表的复制原创 2021-09-06 09:33:39 · 108 阅读 · 0 评论 -
Sep.1-2 合并两个有序数组(简单)& 从前序与中序遍历序列构造二叉树(中等)
88. 合并两个有序数组思路逆向双指针我们为两个数组分别设置一个指针p1p_1p1与p2p_2p2来作为nums1和 nums2的尾部指针。nums1的后半部分是空的,可以直接覆盖而不会影响结果。因此可以指针设置为从后向前遍历,每次取两者之中的较大者放进nums1的最后面。严格来说,在此遍历过程中的任意一个时刻,nums1数组中有 m−p1−1m - p_1 - 1m−p1−1 个元素被放入 nums1的后半部,nums2数组中有 n−p2−1n - p_2 - 1n−p2−1 个元素被原创 2021-09-03 16:28:26 · 178 阅读 · 0 评论 -
Aug.31 移除元素(简单)
八月的最后一天,卷土重来东山再起,在香港某大学的图书馆,冲冲冲!来道简单热热身 ????27. 移除元素思路双指针yyds!当右指针指向元素等于val时,右指针右移,左指针不动;当右指针指向元素不等于val时,将右指针元素赋值给左指针元素,然后同时右移。整个过程保持不变的性质是:区间 [0,left) 中的元素都不等于 val。当左右指针遍历完输入数组以后,left 的值就是输出数组的长度。# pythonclass Solution: def removeElement(self原创 2021-08-31 10:25:58 · 87 阅读 · 0 评论 -
Apr.12-13 字符串解码(中等)& 砖墙(中等)
394. 字符串解码思路这题的思路跟括号匹配很像(因为这题也包含括号),都是利用栈先进后出的特性。关键是如何处理括号的嵌套,如3[a2[c]]。我们每一次遇到 ‘[’ ,就将[res, mult]压入栈,其中res是之前保存的字符串,mult是 ‘[’ 前的乘数。以3[a2[c]]为例:初始化res为’’,mult=0遇到数字,则令mult = mult * 10 + int(l),这样是为了处理l为两位数的情况; 3原创 2021-04-13 14:04:33 · 213 阅读 · 0 评论 -
Apr.5-6 采购方案(简单) & 乐团站位(简单)
LCP 28. 采购方案思路暴力解法会超时。那么可以先从小到大排序。用指针i指向当前遍历的数,用index记录上一次比较的最后一个数的下标。因为这个数前面的数都比这个数要小,所以没有比较的必要。如果nums[i] +nums[index]>target,则index左移。nums = [2,2,1,9], target = 10例:当i遍历到时:1 2 2 5 7 9 ↑ ↑原创 2021-04-06 10:37:37 · 86 阅读 · 0 评论 -
Apr.2 LRU 缓存机制(中等)
星期五,又是摸鱼的一天,那就整整活。146. LRU 缓存机制提示:1 <= capacity <= 30000 <= key <= 30000 <= value <= 104最多调用 3 * 104 次 get 和 put思路维护一个哈希表和一个双向链表。关节是要点是哈希表里存的value是链表的一个node。每个新加入的node或被操作过后的node,都放到链表最前面,那么排在最后面的node就是最久没被操作过的node。当容量满了,原创 2021-04-02 16:39:43 · 118 阅读 · 1 评论 -
Mar.24 根据身高重建队列(中等)& 跳跃游戏II(中等)
406. 根据身高重建队列思路先对数组进行排序,身高按降序,第二个数按升序。如:[[7,0],[4,4],[7,1],[5,0],[6,1],[5,2]]变成:[[7,0],[7,1],[6,1],[5,0],[5,2],[4,4]]创建一个数组tmp来存放结果。 [[7,0],[7,1],[6,1],[5,0],[5,2],[4,4]] ↓ tmp的长度为0,小于等于[7,0]中的0,因此直接插入tmp的尾部tmp = [[7,0]原创 2021-03-24 15:34:00 · 113 阅读 · 0 评论 -
Mar.23 最长公共前缀(简单)& 三数之和(中等)
最长公共前缀思路先找最短字符串,然后逐一比对,保存最短的公共子串长度。# python3class Solution: def longestCommonPrefix(self, strs: List[str]) -> str: if not strs: return '' min_str = min(strs, key=len) count, max_count = 0, len(min_str)原创 2021-03-23 17:22:19 · 376 阅读 · 0 评论 -
Mar.9 最长递增子序列的个数(中等)& 二叉树前中后序和层序遍历(中等)
一、673. 最长递增子序列的个数一些名词最长上升子序列(LIS):Longest Increasing Subsequence最长连续序列(LCS):Longest Consecutive Sequence最长连续递增序列(LCIS):Longest Continuous Increasing Subsequence最长公共子序列(LCS): Longest Common Subsequence思路这题是 最长递增子序列的升级版。同样的,用一个dp数组来存放最长递增子序列的长度,这题还需要原创 2021-03-09 16:56:30 · 236 阅读 · 1 评论 -
Mar.8 反转链表 II(中等)
92. 反转链表 II思路一个一个往前塞,官网给出的图片展示的很好,直接放图。具体的指针更改流程:以此类推 。。。#python3# Definition for singly-linked list.# class ListNode:# def __init__(self, val=0, next=None):# self.val = val# self.next = nextclass Solution: def rever原创 2021-03-09 16:07:24 · 95 阅读 · 0 评论 -
Mar.6 华为2016机试题两道(最高分是多少&简单错误记录)
第一题–Link–示例1输入5 71 2 3 4 5Q 1 5U 3 6Q 3 4Q 4 5U 4 5U 2 9Q 1 5输出5659# python3while True: try: N, M = [int(each) for each in input().split()] score = [int(each) for each in input().split()] for _ in range(M):原创 2021-03-09 16:06:27 · 197 阅读 · 0 评论 -
Mar.4-5 爬楼梯(简单)& 最大正方形(中等)
70. 爬楼梯思路看到这题时,心想:就这就这???斐波那契数列嘛,简单。#python3class Solution: def climbStairs(self, n: int) -> int: if n<3: return n return self.climbStairs(n-1) + self.climbStairs(n-2)写完之后,超时了…看来还是得学习一波,这里记录一下各种解法。# python3# 直接递归解法,容易超时,原创 2021-03-06 10:07:04 · 134 阅读 · 0 评论 -
Mar.2 无重复字符的最长子串(中等)
3. 无重复字符的最长子串思路一、队列遍历字符串,如果队列中没有该字符,则将该字符入队;若存在,则出队,直至队列中没有该字符,再入队。记录下队列最长的时候,即为答案。# python3class Solution: def lengthOfLongestSubstring(self, s: str) -> int: if not s: return 0 ans = list() maxlen = 0原创 2021-03-02 17:31:06 · 212 阅读 · 0 评论 -
Mar.1 每日温度(中等)
739. 每日温度思路一开始想到的是暴力求解,每遍历一个温度,就往后寻找比它大的那个数,直到找到为止。这种方法不出意料,超时。这题便签是栈,故用栈来解决。这里直接复制LeetCode的官方解法说明,与我的大同小异。可以维护一个存储下标的单调栈,从栈底到栈顶的下标对应的温度列表中的温度依次递减。如果一个下标在单调栈里,则表示尚未找到下一次温度更高的下标。正向遍历温度列表。对于温度列表中的每个元素 T[i],如果栈为空,则直接将 i 进栈,如果栈不为空,则比较栈顶元素 prevIndex 对应的温度原创 2021-03-01 17:04:05 · 131 阅读 · 4 评论 -
Feb.26-28 DFS(深度优先搜索)
先复习一下二叉树和队列的声明。二叉树# python3class TreeNode: def __init__(self, x): self.val = x # 节点值 self.left = None # 左子节点 self.right = None # 右子节点 # 初始化节点n1 = TreeNode(3) # 根节点 root// cppstruct TreeNode { int val;原创 2021-02-28 16:08:19 · 133 阅读 · 4 评论 -
Feb.25 有效的括号(简单)
20. 有效括号今天工作很多活,只整一题简单的吧。思路这题能想到栈的话就很简单。先用字典吧括号对应着存储,然后每次的输入如果是同方向的括号就压入栈,不同方向就比较是不是同一类型。# python3class Solution: def isValid(self, s: str) -> bool: dic = { '(':')', '{':'}', '[':']' }原创 2021-02-25 16:59:18 · 147 阅读 · 0 评论 -
leetcode记录汇总
时隔几个月,发现之前做过的题很多都忘的一干二净,所以决定记录一下做题思路,方便复习和复盘…...华为题库开始日期:2021.Feb.24DateTitle2.24Feb.24 最长递增子序列(中等)&上升最长回文子串(中等)……...原创 2021-02-24 17:27:45 · 389 阅读 · 0 评论 -
Feb.24 最长递增子序列(中等)& 最长回文子串(中等)
今天两道题都是动态规划类的题目。动态规划的原理动态规划与分治法类似,都是把大问题拆分成小问题,通过寻找大问题与小问题的递推关系,解决一个个小问题,最终达到解决原问题的效果。但不同的是,分治法在子问题和子子问题等上被重复计算了很多次,而动态规划则具有记忆性,通过填写表把所有已经解决的子问题答案纪录下来,在新问题里需要用到的子问题可以直接提取,避免了重复计算,从而节约了时间,所以在问题满足最优性原理之后,用动态规划解决问题的核心就在于填表,表填写完毕,最优解也就找到。最优性原理是动态规划的基础,最优性原理原创 2021-02-24 17:26:04 · 126 阅读 · 0 评论 -
C++数据结构与算法从入门到放弃(一):数组(图解+代码)
#写在最前忽然发现数据结构忘得差不多了,从头开始来一遍,就当是复习QAQ整点好活数组的定义数组的访问数组的接口在C++上实现数组的定义若集合S由n个元素,且各元素之间具有一个线性次序,则可将他们存放于起始地址A、物理位置连续的一段存储空间,并统称作数组(array)。通常以A作为该数组的标识,数组A[]中的每一个元素都唯一对应于某一个下标编号。在绝大多数高级程序设计语言中,一般都是从0开始...原创 2020-04-23 19:06:25 · 933 阅读 · 0 评论