随笔分类 -  LeetCode / LeetCode题解

熟悉算法
摘要:给你一个整数数组 nums,将它重新排列成 nums[0] < nums[1] > nums[2] < nums[3]... 的顺序。 你可以假设所有输入数组都可以得到满足题目要求的结果。 ###1. 排序后穿插赋值 class Solution { public: void wiggleSort( 阅读全文
posted @ 2022-06-28 02:31 失控D大白兔
摘要:给你一个升序排列的数组 nums ,请你原地删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的相对顺序应该保持一致 。 ###1. 暴力法 从前往后或者从后往前遍历,碰到相同元素,则把后面所有元素前移,覆盖掉该相同元素,时间复杂度为O(n2) class Solution 阅读全文
posted @ 2022-06-26 20:37 失控D大白兔
摘要:给定一个整数 n 和一个 无重复 黑名单整数数组 blacklist 。设计一种算法,从 [0, n - 1] 范围内的任意整数中选取一个 未加入 黑名单 blacklist 的整数。 任何在上述范围内且不在黑名单 blacklist 中的整数都应该有同等的可能性被返回。 ###1. 拒绝采样(超时 阅读全文
posted @ 2022-06-26 04:07 失控D大白兔
摘要:假如有一排房子,共 n 个,每个房子可以被粉刷成红色、蓝色或者绿色这三种颜色中的一种,你需要粉刷所有的房子并且使其相邻的两个房子颜色不能相同。 当然,因为市场上不同颜色油漆的价格不同,所以房子粉刷成不同颜色的花费成本也是不同的。每个房子粉刷成不同颜色的花费是以一个 n x 3 的正整数矩阵 cost 阅读全文
posted @ 2022-06-25 00:47 失控D大白兔
摘要:在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。 ###1. 归并排序 通过归并递归,先拆分成子问题,先计算区间内的逆序数,然后归并,同时计算区间之间的逆序数,并把总数加起来 计算两区间之间的逆序对时,可以跟合并区间操作统一 阅读全文
posted @ 2022-06-23 17:13 失控D大白兔
摘要:给定一个字符串 s 和一些长度相同的单词 words 。找出 s 中恰好可以由 words 中所有单词串联形成的子串的起始位置。 注意子串要与 words 中的单词完全匹配,中间不能有其他字符 ,但不需要考虑 words 中单词串联的顺序。 ####1. 暴力匹配 显然,与所有单词匹配的子串长度必然 阅读全文
posted @ 2022-06-23 14:01 失控D大白兔
摘要:小偷又发现了一个新的可行窃的地区。这个地区只有一个入口,我们称之为 root 。 除了 root 之外,每栋房子有且只有一个“父“房子与之相连。一番侦察之后,聪明的小偷意识到“这个地方的所有房屋的排列类似于一棵二叉树”。 如果两个直接相连的房子在同一天晚上被打劫 ,房屋将自动报警。 1. 特解记忆化 阅读全文
posted @ 2022-06-22 23:51 失控D大白兔
摘要:给你旋转后的数组 nums 和一个整数 target ,如果 nums 中存在这个目标值 target ,则返回它的下标,否则返回 -1 显然要是得复杂度为对数级,需要进行二分处理,首先思考如何使得问题规模变小 其实就是以下一个流程 将数组一分为二,其中一定有一个是有序的,另一个可能是有序,也能是部 阅读全文
posted @ 2022-06-22 03:41 失控D大白兔
摘要:给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 '.' 和 '*' 的正则表达式匹配 '.' 匹配任意单个字符 '*' 匹配零个或多个前面的那一个元素 ###1. 暴力递归 由于*匹配零个或多个前面元素,所以遍历是有方向的,从后往前递归判断,使问题规模缩小 class Solution 阅读全文
posted @ 2022-06-18 02:08 失控D大白兔
摘要:给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的中位数 ###1. 辅助空间暴力法 将两数组合并,分奇偶取中位数 class Solution { public: double findMedianSortedArrays(vecto 阅读全文
posted @ 2022-06-17 22:55 失控D大白兔
摘要:给你一个长度固定的整数数组 arr,请你将该数组中出现的每个零都复写一遍,并将其余的元素向右平移。 ###1. 暴力法 从后往前遍历,碰到0将所有元素后移,即再从后往前遍历一次 class Solution { public: void duplicateZeros(vector<int>& arr 阅读全文
posted @ 2022-06-17 02:59 失控D大白兔
摘要:###1. 静态区间合并 先按左边界排序,再两两比较合并 class Solution { public: vector<vector<int>> merge(vector<vector<int>>& intervals) { if (intervals.size() == 0) return {} 阅读全文
posted @ 2022-06-13 03:31 失控D大白兔
摘要:如果一个二进制字符串,是以一些 0(可能没有 0)后面跟着一些 1(也可能没有 1)的形式组成的,那么该字符串是单调递增的 给你一个二进制字符串 s,你可以将任何 0 翻转为 1 或者将 1 翻转为 0 返回使 s 单调递增的最小翻转次数 ###1. 暴力法 遍历每一个位置,计算将该位置左侧全部置0 阅读全文
posted @ 2022-06-11 02:26 失控D大白兔
摘要:给定一个字符串 s,计算 s 的 不同非空子序列 的个数 ###1. 动态规划(记录位置去重) 设dp[i]为以i位置结尾的子序列数目,方便状态的转移 dp[i]= sum(dp[j]) ,j为上一次该字母出现位置到这一次字母出现的所有位置,从上一次出现位置开始主要为了去重 其实就是把该字母拼接到前 阅读全文
posted @ 2022-06-10 23:23 失控D大白兔
摘要:给定一个字符串 s 和一个字符串 t ,计算在 s 的子序列中 t 出现的个数 ###1. 递归 题目其实就是要求我们在s中从前往后挑选字符来匹配子序列,得到最后的匹配次数 也就是成功匹配的递归分支 class Solution { public: int numDistinct(string s, 阅读全文
posted @ 2022-06-10 20:35 失控D大白兔 阅读(58) 评论(0) 推荐(0)
摘要:给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。 ###1. 暴力法 排序后遍历 class Solution { public: int longestConsecutive(vector<int>& nums) { //暴力 sort(nums 阅读全文
posted @ 2022-06-05 23:38 失控D大白兔
摘要:给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。 ###1. 动态规划 dp[i]表示以i结尾的最长长度 状态转移方程dp[i] = max(dp[j])+1 if num[j]<num[i] 边界条件 dp[0] = 1 时间复杂度为O(n2),即遍历一遍,同时对每个元素往前搜索一 阅读全文
posted @ 2022-06-05 20:25 失控D大白兔
摘要:给定两个整数,被除数 dividend 和除数 divisor。将两数相除,要求不使用乘法、除法和 mod 运算符。 思路跟快速幂差不多,通过不断累加减少使时间复杂度变成对数级,本质上是把其转换成二进制表示,这个二进制数就是商值 当然也可以使用多进制,但由于不能使用乘法,在32位限制的情况下,效率反 阅读全文
posted @ 2022-06-02 21:02 失控D大白兔
摘要:给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。 扩充(字符串相加) class Solution { public: string addStrings(string num1, string num2) { int 阅读全文
posted @ 2022-05-31 01:11 失控D大白兔
摘要:给定一个仅包含 0 和 1 、大小为 rows x cols 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积。 ###1. 暴力求解 该问选择合适的暴力方式也有一定的难度,既要遍历所有可能的矩形,又要尽可能减少重复运算 可以考察以每个点为右下角的最大矩阵,即在二重循环遍历中,计算每个点所 阅读全文
posted @ 2022-05-28 14:12 失控D大白兔