hot100专题

hot100刷题第1-9题,三个专题哈希,双指针,滑动窗口

求满足条件的子数组,一般是前缀和、滑动窗口,经常结合哈希表; 区间操作元素,一般是前缀和、差分数组 数组有序,更大概率会用到二分搜索 目前已经掌握一些基本套路,重零刷起leetcode hot 100, 套路题按套路来,非套路题适当参考gpt解法。 一、梦开始的地方, 两数之和 class Solution:#注意要返回的是数组下标def twoSum(self, nums: Lis

每日一题,力扣leetcode Hot100之238.除自身以外数组的乘积

乍一看这个题很简单,但是不能用除法,并且在O(N)时间复杂度完成或许有点难度。 考虑到不能用除法,如果我们要计算输出结果位置i的值,我们就要获取这个位置左边的乘积和右边的乘积,那么我新设立两个数组L和R。 对于L来说,由于表达的是位置i左边的数的乘积,那么L[0]=1,因为第一个数字左边没数那么为了不影响乘积初始值就设置为1,那么L[1]=L[0]*nums[0],那么L[i]=L[i-1

【Hot100】LeetCode—394. 字符串解码

目录 1- 思路栈实现+四种情况处理 2- 实现⭐394. 字符串解码——题解思路 3- ACM 实现 原题链接:394. 字符串解码 1- 思路 栈实现+四种情况处理 ① 遇到数字,进行倍数相加 、②遇到左括号,压栈之前的元素、③遇到右括号弹出,栈进行拼接、④否则遇到字母,直接拼接在 res通过栈,实现先进后出的思想 对于输入 3[a2[c]] 的输入,在读到 3[得

【Hot100】LeetCode—347. 前 K 个高频元素

目录 1- 思路自定义Node结点 + 哈希表实现 2- 实现⭐347. 前 K 个高频元素——题解思路 3- ACM实现 原题连接:347. 前 K 个高频元素 1- 思路 自定义Node结点 + 哈希表实现 ① 自定义 Node 结点: 自定义 Node 结点中有 value 和 cnt 字段,其中 value 为具体的数字,cnt 为具体的值实现 ① getCn

每日一题,力扣leetcode Hot100之198.打家劫舍

这一道题乍一看可以双层循环暴力解,但是仔细一想有可能最大利益并不是一家隔着一家偷,我可以间隔很多家偷,所以 这个题的思路还是有点像爬楼梯,用动态规划解。 首先确立动态规划的初始条件: 1.dp[0]=nums[0]只有一家 2.dp[1]=max(nums[0],nums[1])有两家选一家多的 然后确立动态规划的循环条件: dp[i]应该是什么 1.第i家能拿,那么dp[i]=n

【Hot100算法刷题集】哈希-01-两数之和(暴力枚举再优化,也不是哈希表的对手)

🏠关于专栏:专栏用于记录LeetCode中Hot100专题的所有题目 🎯每日努力一点点,技术变化看得见 题目转载 题目描述 🔒link->题目跳转链接 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出和为目标值 target 的那 两个整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。 你可以按任

LeetCode Hot100 —— 详细题解(备战秋招)

哈希 (1)两数之和 —— ac 时间复杂度:O(N) 空间复杂度:O(N) class Solution {public:vector<int> twoSum(vector<int>& nums,

【hot100篇-python刷题记录】【最长回文子串】

R7-多维dp篇 思路: 两种情况,中心1个数,中心2个数 大体:中间点扩展原则   class Solution:def expand(self,s,left,right):while left>=0 and right<len(s) and s[left]==s[right]:left-=1right+=1#不满足就回退return left+1,right-1def longe

LeetCode hot100刷题记录

LeetCode刷题记录 (yuque.com)

【hot100篇-python刷题记录】【字符串解码】

R7-栈篇  妙啊,辅助栈! class Solution:def decodeString(self, s: str) -> str:stack,ret,multi=[],"",0for c in s:if c=='[':stack.append([multi,ret])ret,multi="",0elif c==']':cur_multi,last_ret=stack.pop()ret

【Hot100】LeetCode—74. 搜索二维矩阵

原题链接: 74. 搜索二维矩阵 1- 思路 二分 ① 实现一个二分函数② 对每行数组进行二分 2- 实现 ⭐74. 搜索二维矩阵——题解思路 class Solution {public boolean searchMatrix(int[][] matrix, int target) {for(int[] m:matrix){if(binarySearch(m,targe

【hot100篇-python刷题记录】【轮转数组】

R7-数组篇 思路: 印象题,我记得可以使用python切片拼接 python切片 要轮转k个位置,那从第k个下标开始切片,然后拼接[0,k) class Solution:def rotate(self, nums: List[int], k: int) -> None:"""Do not return anything, modify nums in-place instead.

【Hot100】LeetCode—34. 在排序数组中查找元素的第一个和最后一个位置

目录 1- 思路二分 - 左侧二分 + 右侧二分 2- 实现⭐34. 在排序数组中查找元素的第一个和最后一个位置——题解思路 3- ACM 实现 原题链接:34. 在排序数组中查找元素的第一个和最后一个位置 1- 思路 二分 - 左侧二分 + 右侧二分 右区间二分 ——> 找首次出现的位置 ——>nums[mid] >= target左区间二分 ——> 找最后一次出现

【hot100篇-python刷题记录】【回文链表】

R7-链表篇 思路:  转回文数组法 链表转数组,再使用双指针判断是不是回文数组即可。 wkao?!根本不用双指针判断是否回文数组,只需要倒序判断布尔值即可。(牛啊牛啊) # Definition for singly-linked list.# class ListNode:# def __init__(self, val=0, next=None):#

算法复盘——LeetCode hot100:哈希

文章目录 哈希表哈希表的基本概念哈希表的使用1. 插入操作2. 查找操作3. 删除操作 哈希表的优点和缺点1.两数之和复盘 242.有效的字母异位词复盘 49.字母异位词分组复盘 128. 最长连续序列复盘HashSet 哈希表 先来搞清楚什么是哈希表吧~ 概念不清楚方法不清楚怎么做题捏 哈希表(Hash Table),也被称为散列表,是一种使用哈希函数组织数据,以支持

【hot100篇-python刷题记录】【最长连续序列】

R7-哈希篇 思路:sort一下先 然后使用双指针遍历计数,同时从数组头开始。 按照题目的意思,相同元素只能取一个,所以可以用set class Solution:def longestConsecutive(self, nums: List[int]) -> int:if len(nums)<=1:return len(nums)nums.sort()nums1=set(nums)n

【hot100篇-python刷题记录】【最小覆盖子串】

R7-子串篇   class Solution:def minWindow(self, s: str, t: str) -> str:ret_left,ret_right=-1,len(s)left=0#s子串字母出现的次数cnt_s=Counter()#t中字母出现的次数cnt_t=Counter(t)for right,c in enumerate(s):cnt_s[c]+=1whil

【hot100篇-python刷题记录】【多数元素】

R6-技巧篇 直接哈希表计数得了 查找最大,可以不用一次遍历,直接sort排序哈希表(按值排列)也可以 class Solution:def majorityElement(self, nums: List[int]) -> int:n=len(nums)t=n//2dict=defaultdict(int)for num in nums:dict[num]+=1if dict[num]

力扣hot100-动态规划

文章目录 概念动态规划基本思想常见步骤常用技巧常见问题类型 动态规划题目题目: 爬楼梯题解 概念 动态规划 动态规划(Dynamic Programming,简称DP)是一种解决问题的算法思想,通常用于优化问题。它的核心思想是将一个大问题分解成若干个子问题,并通过保存子问题的解来避免重复计算,从而提高效率。 基本思想 优化子结构:动态规划适用于那些可以将问题分解为子问

【hot100篇-python刷题记录】【前 K 个高频元素】

R6-堆 印象题 法1:哈希表+排序 思路: 用哈希表记录吗每个数出现的次数,按照value值排序,输出倒数k个即可,但这样的话,需要根据values找keys,需要增加一遍遍历哈希表。 想到一个改进,直接用collections.Counter(),但这样的话,怎么输出又不太会处理,还是用第一种方法吧。 class Solution:def topKFrequent(self,

【Hot100】LeetCode—46. 全排列

目录 1- 思路回溯 2- 实现⭐46. 全排列——题解思路 3- ACM 实现 题目连接:46. 全排列 1- 思路 回溯 由于是排列问题,需要讲究元素顺序。元素相同顺序不同是不同的排列,而组合问题不强调元素顺序。组合中的 startIndex 是用来保证,不会出现 [1,2] [2,1] 的情况,因此本题是排列,需要 [1,2] [2,1] 的情况,所以是有必要的

【Hot100】LeetCode—207. 课程表

目录 1- 思路有向图+记录入度数组+出度列表 2- 实现⭐207. 课程表——题解思路 3- ACM 实现 题目连接:207. 课程表 1- 思路 有向图+记录入度数组+出度列表 根据输入① 构造遍历构造入度数组② 构造出度列表根据入度数组为 0 的数 加入到 队列中,进行处理 2- 实现 ⭐207. 课程表——题解思路 class Solution

【hot100篇-python刷题记录】【腐烂的橘子】

R6-图论 思路:尽可能从中间开始吧,向四周扩散。 实际上就可以理解为BFS搜索。  使用rot,fresh集合分别记录腐烂、新鲜的集合的元素下标 使用集合是为了更方便增减元素(直接使用-=即可,集合加减) 遍历,rot集合中的每一个元素,对其进行上下左右移动,判断是否存在 存在的话就fresh-rot集合得到最后的集合。 class Solution:def orangesRo

【hot100篇-python刷题记录】【搜索二维矩阵】

R6-二分查找篇 印象题,直接把它转成一维来处理。 class Solution:def searchMatrix(self, matrix: List[List[int]], target: int) -> bool:nums=[i for row in matrix for i in row]def binfind(the,target):low,high=0,len(the)-1wh

【hot100篇-python刷题记录】【螺旋矩阵】

R6-矩阵篇 时隔2日。 印象题: 思路:每次都输出第一行的所有元素。 那就需要想方法把每次的右边一列放到第一行; 这里我们可以使用矩阵的转置,转置后最右边的一列会被放到最后一行,并且刚好矩阵转置是副对角线对称的。 下一步,我们只需要将最后一行放在第一行即可。或者我们可以直接输出最后一行(不可以这样,必须逆序)。 无论怎么样我们都需要考虑到形式问题,就是矩阵是二维数组,我们不能进

【Hot100】LeetCode—236. 二叉树的最近公共祖先

目录 1- 思路递归 + 自底向上 2- 实现⭐236. 二叉树的最近公共祖先——题解思路 3- ACM 实现 题目连接:236. 二叉树的最近公共祖先 1- 思路 递归 + 自底向上 ① 自底向上的逻辑的话 需要采用后续遍历的方式,最后处理中间结点 ② 递归 2.1 参数和返回值 返回值为 TreeNode,参数为 root==null || root ==