Leetcode
文章平均质量分 58
dancingmind
这个作者很懒,什么都没留下…
展开
-
LeetCode 腾讯精选练习50--88,104
88给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组。初始化 nums1 和 nums2 的元素数量分别为 m 和 n 。你可以假设 nums1 的空间大小等于 m + n,这样它就有足够的空间保存来自 nums2 的元素。【思路】① 合并nums1和nums2 直接返回排序后的列表;② 双指针遍历,在nums1上插入nums2的值【实现】class Solution: def merge(self, n原创 2021-03-05 15:10:10 · 110 阅读 · 0 评论 -
LeetCode 腾讯精选练习50--62, 70, 78
62 不同路径一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。问总共有多少条不同的路径?【思路】不加任何修饰,标准的动态规划题。状态方程:dp[i][j]=dp[i−1][j]+dp[i][j−1]dp[i][j] = dp[i-1][j] + dp[i][j-1]dp[i][j]=dp[i−1][j]+dp[i][j−1]即坐标第(i,j)格原创 2021-01-27 17:54:46 · 154 阅读 · 0 评论 -
LeetCode 腾讯精选练习50--54, 59, 61
54 螺旋矩阵给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。示例 1:输入:[[ 1, 2, 3 ],[ 4, 5, 6 ],[ 7, 8, 9 ]]输出: [1,2,3,6,9,8,7,4,5]【思路】菜鸡如我用了暴力解法,由于矩阵是一个四边形,每次通过矩阵大小记录位置,判断位置然后添加一条边然后矩阵再减去一条边。然后看到有个大佬用了更优化的解法,不需要判断位置,每次取首行,原矩阵去掉首行后,翻转获得新矩阵,递归求解。原创 2021-01-26 14:52:14 · 118 阅读 · 0 评论 -
LeetCode 腾讯精选练习50--43, 46, 53
43. 字符串相乘给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。示例 1:输入: num1 = “2”, num2 = “3”输出: “6”【思路】注意哦,这道题的本意并不是让我们把字符串变为整数直接返回运算结果,考的其实是进位的计算。所以我们需要使用原始竖式乘法的方法去计算,并且优化。本菜鸡目前只能写出如下代码,储存进位和当前位的方法目前还不能熟练掌握。【实现】class Solution: d原创 2021-01-24 18:34:25 · 120 阅读 · 0 评论 -
LeetCode 腾讯精选练习50--23, 26, 33
23. 合并K个升序链表给你一个链表数组,每个链表都已经按升序排列。请你将所有链表合并到一个升序链表中,返回合并后的链表。示例 1:输入:lists = [[1,4,5],[1,3,4],[2,6]]输出:[1,1,2,3,4,4,5,6]解释:链表数组如下:[1->4->5,1->3->4,2->6]将它们合并到一个有序链表中得到。1->1->2->3->4->4->5->6【思路】合并两个链表的升级原创 2021-01-20 11:28:49 · 111 阅读 · 0 评论 -
LeetCode 腾讯精选练习50--16, 20, 21
16. 最接近的三数之和给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。示例:输入:nums = [-1,2,1,-4], target = 1输出:2解释:与 target 最接近的和是 2 (-1 + 2 + 1 = 2) 。【思路】与三数之和一致,将数列排序,固定一个点,另外两个点使用指针对撞法。【实现】class Solution:原创 2021-01-18 18:05:47 · 107 阅读 · 0 评论 -
LeetCode 腾讯精选练习50--11, 14, 15
11. 盛最多水的容器给你 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0) 。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。【思路】显而易见,这道题可以求得面积公式:max((j−i)∗min(height[i],height[j]))\max( (j - i ) * \min( height[i], height[j]) )max((j−i)∗mi原创 2021-01-16 12:49:38 · 201 阅读 · 1 评论 -
LeetCode 腾讯精选练习50--7, 8, 9
7. 整数反转给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−2^31, 2^31 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。示例 1:输入:x = 123输出:321【思路】将其转化为字符串反转【实现】class Solution: def reverse(self, x: int) -> int: if x == 0 : return原创 2021-01-13 16:15:46 · 102 阅读 · 0 评论 -
LeetCode 腾讯精选练习50--2, 4, 5
两数相加题号:2难度:中等https://leetcode-cn.com/problems/add-two-numbers/给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。示例 1:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -> 8原因:342 + 465 = 807【思路】建立一个新的节点为初始节点,使用一个变量保存原创 2021-01-06 11:53:27 · 113 阅读 · 0 评论 -
Leetcode编程实践-查找-滑动数组&二分查找
5.1 滑动数组算法应用Leetcode219 存在重复元素2给定一个整数数组和一个整数 k,判断数组中是否存在两个不同的索引 i 和 j,使得 nums [i] = nums [j],并且 i 和 j 的差的 绝对值 至多为 k。【思路】使用长度为k的滑动窗口查找,若窗口内去重元素小于k,则返回true,否则继续滑动。class Solution: def containsNearbyDuplicate(self, nums: List[int], k: int) -> bo原创 2020-09-02 16:17:13 · 239 阅读 · 0 评论 -
Leetcode编程实践-查找-对撞指针
leetcode 1 两数之和给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]力扣第一题,就像词汇书的abandon,无脑解法就是套两个循环遍历,这里使用复杂度更低的写法。【思路】原创 2020-08-26 22:44:56 · 208 阅读 · 0 评论 -
Leetcode编程实践-查找
3.1 考虑的基本数据结构第一类:查找有无–set某元素是否存在:集合set只储存键,而不需要对应相应的值,set中的键不允许重复。第二类:查找对应关系(键值对应)–dict某元素出现了几次:dictdict中的键不允许重复第三类:改变映射关系–map通过将原有序列的关系映射统一表示为其他3.2 算法应用leetcode242 有效的字母异位词示例 1:输入: s = “anagram”, t = “nagaram”输出: true【思路】两个词需要每个字母出现的次数都一样原创 2020-08-22 21:08:58 · 179 阅读 · 0 评论 -
Leetcode编程实践-动态规划
2.1 主要思想通过解决子问题,递归的求出原问题的解。2.2 动态规划模板步骤确定动态规划状态;写出状态转移方程(画出状态转移表);考虑初始化条件;考虑输出状态;考虑对时间、空间复杂度优化。2.3 例题leetcode300 最长上升子序列给定一个无序的整数数组,找到其中最长上升子序列的长度。示例:输入: [10,9,2,5,3,7,101,18]输出: 4解释: 最长的上升子序列是 [2,3,7,101],它的长度是 4。【思路】计算由每个位置结尾的最长上升子序列,原创 2020-08-21 13:59:03 · 159 阅读 · 0 评论 -
Leetcode编程实践-分而治之
1.1 主要思想分治算法的主要思想是将原问题 若干个子问题,直到子问题 ,停止递归。将子问题逐个 击破(一般是同种方法),将已经解决的子问题合并,最后,算法会 得到原问题的答案。1.2 分治算法步骤分:递归将问题分解为各个的子问题 (性质相同的、相互独立的子问题);治:将子问题逐个击破;合:将已解决的子问题逐层合并,最终得出原问题的解。1.3 分治法使用的情况原问题能被分解为子问题;子问题的结构与性质与原问题一样,并且相互独立,子问题之间不包含公共的子子问题;子问题可以合并为原问题的原创 2020-08-19 21:37:56 · 241 阅读 · 0 评论