
刷题
斯班奇的好朋友阿法法
这个作者很懒,什么都没留下…
展开
-
[力扣每日一题]525. 连续数组
[力扣每日一题]525. 连续数组给定一个二进制数组 nums , 找到含有相同数量的 0 和 1 的最长连续子数组,并返回该子数组的长度。示例 1:输入: nums = [0,1]输出: 2说明: [0, 1] 是具有相同数量0和1的最长连续子数组。示例 2:输入: nums = [0,1,0]输出: 2说明: [0, 1] (或 [1, 0]) 是具有相同数量0和1的最长连续子数组。提示:1 <= nums.length <= 105nums[i] 不是 0 就是 1原创 2021-06-03 11:19:21 · 305 阅读 · 0 评论 -
[力扣每日一题]477. 汉明距离总和
[力扣每日一题]477. 汉明距离总和两个整数的 汉明距离 指的是这两个数字的二进制数对应位不同的数量。计算一个数组中,任意两个数之间汉明距离的总和。示例:输入: 4, 14, 2输出: 6解释: 在二进制表示中,4表示为0100,14表示为1110,2表示为0010。(这样表示是为了体现后四位之间关系)所以答案为:HammingDistance(4, 14) + HammingDistance(4, 2) + HammingDistance(14, 2) = 2 + 2 + 2 = 6.原创 2021-05-28 13:00:31 · 123 阅读 · 0 评论 -
力扣周赛5765. 跳跃游戏 VII
力扣周赛5765. 跳跃游戏 VII给你一个下标从 0 开始的二进制字符串 s 和两个整数 minJump 和 maxJump 。一开始,你在下标 0 处,且该位置的值一定为 ‘0’ 。当同时满足如下条件时,你可以从下标 i 移动到下标 j 处:i + minJump <= j <= min(i + maxJump, s.length - 1) 且s[j] == ‘0’.如果你可以到达 s 的下标 s.length - 1 处,请你返回 true ,否则返回 false 。示例 1:原创 2021-05-23 17:04:35 · 244 阅读 · 0 评论 -
[sql]596. 超过5名学生的课
[sql]596. 超过5名学生的课有一个courses 表 ,有: student (学生) 和 class (课程)。请列出所有超过或等于5名学生的课。例如,表:±--------±-----------+| student | class |±--------±-----------+| A | Math || B | English || C | Math || D | Biology原创 2021-05-15 16:44:29 · 125 阅读 · 0 评论 -
[SQL]196. 删除重复的电子邮箱
[SQL]196. 删除重复的电子邮箱编写一个 SQL 查询,来删除 Person 表中所有重复的电子邮箱,重复的邮箱里只保留 Id 最小 的那个。±—±-----------------+| Id | Email |±—±-----------------+| 1 | john@example.com || 2 | bob@example.com || 3 | john@example.com |±—±-----------------+Id 是这个表的主键原创 2021-05-15 16:33:47 · 134 阅读 · 0 评论 -
[sql]197. 上升的温度
[sql]197. 上升的温度表 Weather±--------------±--------+| Column Name | Type |±--------------±--------+| id | int || recordDate | date || temperature | int |±--------------±--------+id 是这个表的主键该表包含特定日期的温度信息编写一个 SQL 查询,来查找原创 2021-05-05 17:05:49 · 147 阅读 · 0 评论 -
[sql刷题]620. 有趣的电影
[sql刷题]620. 有趣的电影某城市开了一家新的电影院,吸引了很多人过来看电影。该电影院特别注意用户体验,专门有个 LED显示板做电影推荐,上面公布着影评和相关电影描述。作为该电影院的信息部主管,您需要编写一个 SQL查询,找出所有影片描述为非 boring (不无聊) 的并且 id 为奇数 的影片,结果请按等级 rating 排列。例如,下表 cinema:±--------±----------±-------------±----------+| id | movie原创 2021-05-03 20:28:10 · 276 阅读 · 0 评论 -
[力扣每日一题]7. 整数反转
[力扣每日一题]7. 整数反转核心点:INT_MIN 代表int范围下限INT_MAX 代表int范围上限给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。假设环境不允许存储 64 位整数(有符号或无符号)。示例 1:输入:x = 123输出:321class Solution {public: int reverse(int x) {原创 2021-05-03 17:22:00 · 152 阅读 · 0 评论 -
顺时针打印矩阵
顺时针打印矩阵输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.class Solution {public: vector<int> printMatrix(vector<vector<int> > matrix) { ve原创 2021-04-19 10:10:44 · 95 阅读 · 0 评论 -
219. 存在重复元素 II(滑动窗口set的使用)
219. 存在重复元素 II(滑动窗口set的使用)给定一个整数数组和一个整数 k,判断数组中是否存在两个不同的索引 i 和 j,使得 nums [i] = nums [j],并且 i 和 j 的差的 绝对值 至多为 k。示例 1:输入: nums = [1,2,3,1], k = 3输出: true示例 2:输入: nums = [1,0,1,1], k = 1输出: true示例 3:输入: nums = [1,2,3,1,2,3], k = 2输出: false链接用set维持原创 2021-04-18 15:41:03 · 138 阅读 · 0 评论 -
45. 跳跃游戏 II【贪心】
45. 跳跃游戏 II【贪心】给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。你的目标是使用最少的跳跃次数到达数组的最后一个位置。示例:输入: [2,3,1,1,4]输出: 2解释: 跳到最后一个位置的最小跳跃数是 2。从下标为 0 跳到下标为 1 的位置,跳 1 步,然后跳 3 步到达数组的最后一个位置。链接如果我们「贪心」地进行正向查找,每次找到可到达的最远位置,就可以在线性时间内得到最少的跳跃次数。例如,对于数组 [2,3,1,原创 2021-04-17 16:22:35 · 118 阅读 · 0 评论 -
LeetCode[滑动窗口]:无重复字符的最长子串
LeetCode[滑动窗口]:无重复字符的最长子串题目描述:给定一个字符串,找出不含有重复字符的 最长子串 的长度。示例:给定 “abcabcbb” ,没有重复字符的最长子串是 “abc” ,那么长度就是3。给定 “bbbbb” ,最长的子串就是 “b” ,长度是1。给定 “pwwkew” ,最长子串是 “wke” ,长度是3。请注意答案必须是一个子串,“pwke” 是 子序列 而不是子串解题思路:这是一道可以跟Two Sum媲美的题。给了我们一个字符串,让我们求最长的无重复字符的子串,注意原创 2021-04-12 22:09:08 · 87 阅读 · 0 评论 -
前缀和的求解
前缀和的求解补充下标0开始的,比较麻烦 建议从下标1开始for(int i=0;i<n;i++) cin>>a[i];s[0]=a[0];for (int i=0;i<n;i++) s[i]=s[i-1]+a[i];//区间[L,R]的和是,s[R-1]-S[L-2] 注意下标//S[0],S[1]要单独计算...原创 2021-04-12 21:36:42 · 103 阅读 · 0 评论 -
213打家劫舍2【DP】
213打家劫舍2【DP】你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都围成一圈,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你在不触动警报装置的情况下,能够偷窃到的最高金额。示例 1:输入: [2,3,2]输出: 3解释: 你不能先偷窃 1 号房屋(金额 = 2),然后偷窃 3 号房屋(金额 = 2), 因为他们是原创 2021-04-12 20:10:27 · 98 阅读 · 0 评论 -
[sql]175. 组合两个表
[sql]175. 组合两个表算法因为表 Address 中的 personId 是表 Person 的外关键字,所以我们可以连接这两个表来获取一个人的地址信息。考虑到可能不是每个人都有地址信息,我们应该使用 outer join 而不是默认的 inner join。select FirstName, LastName, City, Statefrom Person left join Address //两表连接用Jionon Person.PersonId = Addre原创 2021-04-12 19:41:45 · 112 阅读 · 0 评论 -
设计模式——单例模式
设计模式——单例模式1.饿汉式基于class loader机制避免多线程的同步。public class Singleton{ private static Singleton sin=new Singleton();//初始化实例对象 private Singleton(){ //private类型的构造函数,保证其他对象不能new一个该对象的实例 } public static Singleton getSin(){ //唯一一个public的方法 return sin; }原创 2021-04-12 15:01:31 · 93 阅读 · 0 评论 -
C++SORT的cmp函数注意点
C++SORT的cmp函数注意点static bool cmp(int a,int b){ //注意//1.cmp函数是static类型//2.返回值必须为bool//3.传参类型为传送迭代器的元素类型int return a+b>b+a;}int main(){ vector<int>ss(n); sort(ss.begin(),ss.end(),cmp); return 0; }...原创 2021-04-12 10:00:44 · 355 阅读 · 0 评论 -
322. 零钱兑换【dp背包】
322. 零钱兑换【dp背包】给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1。你可以认为每种硬币的数量是无限的。示例 1:输入:coins = [1, 2, 5], amount = 11输出:3解释:11 = 5 + 5 + 1示例 2:输入:coins = [2], amount = 3输出:-1原题class Solution {public: int原创 2021-04-10 16:52:31 · 103 阅读 · 0 评论 -
264. 丑数 II[dp]
264. 丑数 II[dp]编写一个程序,找出第 n 个丑数。丑数就是质因数只包含 2, 3, 5 的正整数。示例:输入: n = 10输出: 12解释: 1, 2, 3, 4, 5, 6, 8, 9, 10, 12 是前 10 个丑数。说明:1 是丑数。n 不超过1690。原题class Solution {public: int nthUglyNumber(int n) { vector<int>dp(n+1); dp[1]=原创 2021-04-10 16:07:50 · 100 阅读 · 0 评论 -
97. 交错字符串[dp]
97. 交错字符串[dp]给定三个字符串 s1、s2、s3,请你帮忙验证 s3 是否是由 s1 和 s2 交错 组成的。两个字符串 s 和 t 交错 的定义与过程如下,其中每个字符串都会被分割成若干 非空 子字符串:s = s1 + s2 + … + snt = t1 + t2 + … + tm|n - m| <= 1交错 是 s1 + t1 + s2 + t2 + s3 + t3 + … 或者 t1 + s1 + t2 + s2 + t3 + s3 + …提示:a + b 意味着字符串原创 2021-04-10 11:48:13 · 89 阅读 · 0 评论 -
72. 编辑距离(字符串dp)
72. 编辑距离给你两个单词 word1 和 word2,请你计算出将 word1 转换成 word2 所使用的最少操作数 。你可以对一个单词进行如下三种操作:插入一个字符删除一个字符替换一个字符示例 1:输入:word1 = “horse”, word2 = “ros”输出:3解释:horse -> rorse (将 ‘h’ 替换为 ‘r’)rorse -> rose (删除 ‘r’)rose -> ros (删除 ‘e’)方法一:动态规划思路和算法我们可以原创 2021-04-10 11:21:39 · 132 阅读 · 0 评论 -
63. 不同路径 II
63. 不同路径 II一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径?网格中的障碍物和空位置分别用 1 和 0 来表示。输入:obstacleGrid = [[0,0,0],[0,1,0],[0,0,0]]输出:2解释:3x3 网格的正中间有一个障碍物。从左上角到右下角一共有 2 条不同原创 2021-04-10 10:39:43 · 112 阅读 · 0 评论 -
53. 最大子序和
53. 最大子序和给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例 1:输入:nums = [-2,1,-3,4,-1,2,1,-5,4]输出:6解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。示例 2:输入:nums = [1]输出:1原题class Solution {public: int maxSubArray(vector<int>& nums) { vector原创 2021-04-10 10:09:26 · 104 阅读 · 0 评论 -
[力扣经典dfs]78. 子集
[力扣经典dfs]78. 子集给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。示例 1:输入:nums = [1,2,3]输出:[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]示例 2:输入:nums = [0]输出:[[],[0]]思路:以{1,2,3}为例初始时为空集,判断是否将1添加入集合中,到达第一层;再判断是否将2添加入集合中,到达第二层;原创 2021-04-07 11:10:59 · 132 阅读 · 0 评论 -
面试题34. 二叉树中和为某一值的路径
面试题34. 二叉树中和为某一值的路径输入一棵二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径。从树的根节点开始往下一直到叶节点所经过的节点形成一条路径。示例:给定如下二叉树,以及目标和 target = 22, 5 / \ 4 8 / / \ 11 13 4 / \ / \ 7 2 5 1返回:[[5,4,11,2],[5,8,4,5]]cla原创 2021-04-06 16:32:04 · 115 阅读 · 0 评论 -
剑指 Offer 36. 二叉搜索树与双向链表
剑指 Offer 36. 二叉搜索树与双向链表输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的循环双向链表。要求不能创建任何新的节点,只能调整树中节点指针的指向。为了让您更好地理解问题,以下面的二叉搜索树为例:我们希望将这个二叉搜索树转化为双向循环链表。链表中的每个节点都有一个前驱和后继指针。对于双向循环链表,第一个节点的前驱是最后一个节点,最后一个节点的后继是第一个节点。下图展示了上面的二叉搜索树转化成的链表。“head” 表示指向链表中有最小元素的节点。解题思路:本文解法基于性质:二叉搜索原创 2021-04-05 16:12:43 · 132 阅读 · 0 评论 -
剑指 Offer 32 - III. 从上到下打印二叉树 III
剑指 Offer 32 - III. 从上到下打印二叉树 III请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序在这里插入代码片打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推。例如:给定二叉树: [3,9,20,null,null,15,7],3/ 9 20/ 15 7返回其层次遍历结果:[[3],[20,9],[15,7]]class Solution {public: vector<vector原创 2021-04-04 16:57:06 · 111 阅读 · 0 评论 -
剑指 Offer 31. 栈的压入、弹出序列
剑指 Offer 31. 栈的压入、弹出序列输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如,序列 {1,2,3,4,5} 是某栈的压栈序列,序列 {4,5,3,2,1} 是该压栈序列对应的一个弹出序列,但 {4,3,5,1,2} 就不可能是该压栈序列的弹出序列。示例 1:输入:pushed = [1,2,3,4,5], popped = [4,5,3,2,1]输出:true解释:我们可以按以下顺序执行:push(1), pu原创 2021-04-04 16:25:07 · 101 阅读 · 0 评论 -
剑指 Offer 32 - II. 从上到下打印二叉树 II
剑指 Offer 32 - II. 从上到下打印二叉树 II从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。例如:给定二叉树: [3,9,20,null,null,15,7],3/ 9 20/ 15 7返回其层次遍历结果:[[3],[9,20],[15,7]]思路:层序遍历,每次queue中存储的都是同一层的节点,注意双vector结构保存的节点,添加方式,先建立一个新的vector<>,修改完毕后添加到二重vectorcla原创 2021-04-04 16:18:53 · 80 阅读 · 0 评论 -
[DP经典例题]1143. 最长公共子序列
[DP经典例题]1143. 最长公共子序列给定两个字符串 text1 和 text2,返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 ,返回 0 。一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。例如,“ace” 是 “abcde” 的子序列,但 “aec” 不是 “abcde” 的子序列。两个字符串的 公共子序列 是这两个字符串所共同拥有的子序列。示例 1:输入:text1 =原创 2021-04-03 10:02:18 · 206 阅读 · 0 评论 -
剑指 Offer 53 - II. 0~n-1中缺失的数字
剑指 Offer 53 - II. 0~n-1中缺失的数字一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0~n-1之内。在范围0~n-1内的n个数字中有且只有一个数字不在该数组中,请找出这个数字。示例 1:输入: [0,1,3]输出: 2示例 2:输入: [0,1,2,3,4,5,6,7,9]输出: 8限制:1 <= 数组长度 <= 10000解题思路:排序数组中的搜索问题,首先想到 二分法 解决。根据题意,数组可以按照以下规则划分为两部分。原创 2021-03-31 16:00:44 · 272 阅读 · 0 评论 -
剑指 Offer 39. 数组中出现次数超过一半的数字
剑指 Offer 39. 数组中出现次数超过一半的数字数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。你可以假设数组是非空的,并且给定的数组总是存在多数元素。示例 1:输入: [1, 2, 3, 2, 2, 2, 5, 4, 2]输出: 2限制:1 <= 数组长度 <= 50000解题思路:本文将 “数组中出现次数超过一半的数字” 简称为 “众数” 。需要注意的是,数学中众数的定义为 “数组中出现次数最多的数字” ,与本文定义不同。本题常见的三种解法:哈希表原创 2021-03-30 20:36:30 · 98 阅读 · 0 评论 -
[剑指offer52] 两个链表的第一个公共节点
[剑指offer52] 两个链表的第一个公共节点输入两个链表,找出它们的第一个公共节点。如下面的两个链表:在节点 c1 开始相交。示例 1:输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3输出:Reference of the node with value = 8输入解释:相交节点的值为 8 (注意,如果两个列表相交则不能为 0)。从各自的表头开始算起,链表 A 为 [原创 2021-03-30 17:25:58 · 96 阅读 · 0 评论 -
[两两交换链表中的节点]
[两两交换链表中的节点]class Solution {public: ListNode* swapPairs(ListNode* head) { ListNode *node=new ListNode(-1); node->next=head; ListNode *pre=node; while(pre->next!=NULL&&pre->next->next!=NULL){原创 2021-03-24 15:29:06 · 77 阅读 · 0 评论 -
【归并有序链表】
【归并有序链表】class Solution {public: ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) { if(l1==NULL)return l2; if(l2==NULL)return l1; if(l1->val<l2->val){ l1->next=mergeTwoLists(l1->next,l2);原创 2021-03-24 14:59:55 · 91 阅读 · 0 评论 -
java快速寻找一个数组的最大值或最小值, min, max,三种方法
java快速寻找一个数组的最大值或最小值, min, max,三种方法java 中 寻找一个数组中的最大值或最小,除了自己专门编写一个 min 或 max 函数外,还有几种方式方便使用。使用 stream将一个数组放进 stream 里面,然后直接调用 stream 里的 min 或 max 函数得到最大值或最小值。使用 collection将数组转化为对象数组,即 int 转化为 Integer (需要使用 toObject 转换)。 然后调用 Collection 里面的 min或ma原创 2021-03-18 21:15:46 · 3330 阅读 · 0 评论 -
【力扣每日一题】92. 反转链表 II
【力扣每日一题】92. 反转链表 II反转从位置 m 到 n 的链表。请使用一趟扫描完成反转。说明:1 ≤ m ≤ n ≤ 链表长度。示例:输入: 1->2->3->4->5->NULL, m = 2, n = 4输出: 1->4->3->2->5->NULLclass Solution {public: ListNode *reverseP(ListNode *head,ListNode *tail){//头尾指针区间反转原创 2021-03-18 11:19:03 · 145 阅读 · 0 评论 -
string类的相关操作
1.string类对象的常见构造 string s1;//构造空的string类对象s1 string s2("hello word");//用C格式字符串构造string类对象s2 string s3(10, 'a');//用10个字符'a'构造string类对象s3 string s4(s2);//拷贝构造s4 string s5(s3, 8);//用s3中下标为8的字符构造string对象s 2.string类对象的容量操作size_t size() // 返回字符串有效字符长度原创 2021-03-11 22:52:02 · 121 阅读 · 0 评论 -
技巧20210309
技巧20210309a/b向下取整==(a+b-1)/b原创 2021-03-09 19:20:02 · 116 阅读 · 0 评论 -
【力扣每日一题】1047. 删除字符串中的所有相邻重复项
【力扣每日一题】1047. 删除字符串中的所有相邻重复项给出由小写字母组成的字符串 S,重复项删除操作会选择两个相邻且相同的字母,并删除它们。在 S 上反复执行重复项删除操作,直到无法继续删除。在完成所有重复项删除操作后返回最终的字符串。答案保证唯一。class Solution {public: string removeDuplicates(string S) { string stk; for (char ch:S){原创 2021-03-09 16:45:10 · 167 阅读 · 0 评论