随笔分类 - leetcode
摘要:221. 最大正方形 动态规划 求的是最大面积,可以转换为求最大边长。 创建一个二维数组dp dp是以i, j坐标为右下角的正方形的最大边长。 状态转移方程式: matrix[i][j] == "1"的时候: f(i, j) = min(f(i-1, j), f(i, j-1), f(i-1, j-
阅读全文
摘要:11. 盛最多水的容器 思路 这题有点像接雨水,但是比接雨水简单的是,这个中间是没有木棍的,所以很容易计算出2根棍子能装多少水。 根据木桶效应,容器装水多少是根据最短那块来决定的。 本题用双指针的方式,首先比较两侧木板较短的那块板子,记录下值,如果右侧小则右侧的指针移动,为啥呢,因为右侧可能会有更高
阅读全文
摘要:重点 首先注意几个重点: 1. arr1和arr2里最大的元素不会超过1000 2. arr2里面没有重复的元素 3. arr2里面每个元素必定在arr1里面出现 思路 1. 先创建一个大小为1001的数组data用来存放arr1中每个元素出现的次数(因为最大值可能是1000),其实这里可以简化,只
阅读全文
摘要:题目链接: 922. 按奇偶排序数组 II 思路 很简单,搞懂问题的核心就行,假设现在有奇数在偶数位上,偶数在奇数位上。 那么我们要做的就是,找到分别在对方位置上的数字,然后交换他们就行。 class Solution: def sortArrayByParityII(self, A: List[i
阅读全文
摘要:题目链接: 15. 三数之和 解法 暴力法 首先可以确定的是暴力法的时间复杂度是O(N³), 所以基本上不考虑此等解法。 排序+双指针 思路是先将数组排序(从小到大),然后固定数组的第一位。 定义2个指针(左右指针)分别指向定位数组的后一位和数组最后一位。 如果3个数字加起来比0小,则左指针右移,循
阅读全文
摘要:hash表 1. 思路很简单,先遍历数组,存储每个元素的个数 2. 遍历hash表,拿到大于 n/2的数字,直接return class Solution: def majorityElement(self, nums: List[int]) -> int: hash = dict() for n
阅读全文
摘要:首先要弄清楚题目的意图,曾经在字节面试遇到过类似的题目,但那题是需要找出这个峰值。 所以解法也肯定不一样。 官方给的题解是直接遍历,我们这里采用双指针分别从头和尾往中间遍历,如果山脉符合要求,那么2个指针会停在同一个山脉。 class Solution: def validMountainArray
阅读全文
摘要:空间换时间,hash表2次遍历(Python) 潇洒解法: 利用Python的set数据结构,完成交集操作 class Solution: def intersection(self, nums1: List[int], nums2: List[int]) -> List[int]: return
阅读全文

浙公网安备 33010602011771号