每日一题
非著名奶茶爱好者
欢迎大家交流~
展开
-
c语言机试练习
考研复试机试原创 2023-02-23 18:28:00 · 904 阅读 · 2 评论 -
js刷力扣 - 合并区间
1.题目详情以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。2.解题思路先排序,按照数组的第一个左值升序排序。[a,b],a为左值。定义一个新数组,称为合并数组。先将排序后数组中的第一个存进去。因为左值排序时已经比较过,因而只比较合并数组的右值即可,分为两种可能。 a. 若nums[左]>merge[右],举个例子:原创 2021-09-27 21:54:07 · 131 阅读 · 0 评论 -
js刷力扣- 最大子序和
1.题目描述给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。2.解题思路本题采用动态规划求解。 for循环的每一步寻找当前的最大子序和,分两种情况:与前面合并不与前面合并两种情况中找到最大值,继续循环,不断更新。 方程式为dp[i] = max(dp[i-1] + nums[i], nums[i]);3.代码实现/** * @param {number[]} nums * @return {number} */fu原创 2021-09-27 13:19:19 · 175 阅读 · 0 评论 -
每日一题938 - 二叉搜索树的范围和
1.题目详情给定二叉搜索树的根结点 root,返回值位于范围 [low, high] 之间的所有结点的值的和。2.解题思路看了题解才会的。理解题目,题目的意思是返回[low,high]范围内的节点之和,注意节点要在范围之间3.代码实现这里采用的是先序二叉树(头左右)# Definition for a binary tree node.# class TreeNode(object):# def __init__(self, val=0, left=None, right=Non原创 2021-04-27 12:00:27 · 87 阅读 · 0 评论 -
每日一题-移动距离
1.题目详情X星球居民小区的楼房全是一样的,并且按矩阵样式排列。其楼房的编号为1,2,3…当排满一行时,从下一行相邻的楼往反方向排号。比如:当小区排号宽度为6时,开始情形如下:1 2 3 4 5 612 11 10 9 8 713 14 15 …我们的问题是:已知了两个楼号m和n,需要求出它们之间的最短移动距离(不能斜线方向移动)输入为3个整数w m n,空格分开,都在1到10000范围内w为排号宽度,m,n为待计算的楼号。要求输出一个整数,表示m n两楼间最短移动距离。2.解题思路原创 2021-04-08 11:10:06 · 324 阅读 · 0 评论 -
每日一题316-去除重复字母
1.题目详情给你一个字符串 s ,请你去除字符串中重复的字母,使得每个字母只出现一次。需保证 返回结果的字典序最小(要求不能打乱其他字符的相对位置)。2.解题思路栈,厘清题目要求,如何才能使返回的字符序列最小?3.代码实现class Solution: def removeDuplicateLetters(self, s): stack = [] dic = collections.Counter(s) #统计单个元素的个数 for原创 2021-03-14 10:40:42 · 190 阅读 · 0 评论 -
每日一题682-棒球比赛
1.题目详情你现在是一场采用特殊赛制棒球比赛的记录员。这场比赛由若干回合组成,过去几回合的得分可能会影响以后几回合的得分。比赛开始时,记录是空白的。你会得到一个记录操作的字符串列表 ops,其中 ops[i] 是你需要记录的第 i 项操作,ops 遵循下述规则:整数 x - 表示本回合新获得分数 x“+” - 表示本回合新获得的得分是前两次得分的总和。题目数据保证记录此操作时前面总是存在两个有效的分数。“D” - 表示本回合新获得的得分是前一次得分的两倍。题目数据保证记录此操作时前面总是存在一个有原创 2021-03-13 13:05:46 · 206 阅读 · 0 评论 -
每日一题71-简化路径
1.题目详情给你一个字符串 path ,表示指向某一文件或目录的 Unix 风格 绝对路径 (以 ‘/’ 开头),请你将其转化为更加简洁的规范路径。在 Unix 风格的文件系统中,一个点(.)表示当前目录本身;此外,两个点 (…) 表示将目录切换到上一级(指向父目录);两者都可以是复杂相对路径的组成部分。任意多个连续的斜杠(即,’//’)都被视为单个斜杠 ‘/’ 。 对于此问题,任何其他格式的点(例如,’…’)均被视为文件/目录名称。请注意,返回的 规范路径 必须遵循下述格式:始终以斜杠 ‘/’ 开原创 2021-03-12 10:55:13 · 285 阅读 · 0 评论 -
每日一题20-有效的括号
1.题目详情给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。2.解题思路典型的先进后出,用栈。建立哈希表 dic 构建左右括号对应关系当遇到匹配的最小括号对时,我们将这对括号从栈中删除(即出栈),如果最后栈为空,那么它是有效的括号,反之不是。3.代码实现class Solution: def isValid(self, s: str) ->原创 2021-03-11 12:18:28 · 83 阅读 · 0 评论 -
每日一题224-基本计算器
1.题目详情实现一个基本的计算器来计算一个简单的字符串表达式 s 的值。2.解题思路本来用的python中的eval()方法,但是有些测试用例数量太大,没能通过。题解用的栈3.代码实现class Solution: def calculate(self, s: str) -> int: res = 0 stack = [] sign = 1 i = 0 n = len(s) while原创 2021-03-10 10:27:27 · 143 阅读 · 0 评论 -
每日一题1047-删除字符串中的所有相邻重复项
1.题目详情给出由小写字母组成的字符串 S,重复项删除操作会选择两个相邻且相同的字母,并删除它们。在 S 上反复执行重复项删除操作,直到无法继续删除。在完成所有重复项删除操作后返回最终的字符串。答案保证唯一。2.解题思路数据结构 栈只需删除重复项即可,因此可以使用栈实现每次添加时比较是否与栈顶元素相同若相同则删除栈顶元素且不插入若不相同则插入新元素3.代码实现class Solution: def removeDuplicates(self, S: str) -> st原创 2021-03-09 10:49:41 · 134 阅读 · 0 评论 -
每日一题132-分割回文串 II
1.题目详情给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是回文。返回符合要求的 最少分割次数 。2.题目详情今天的每日一题又没做出来,看了题解才理解的。动态规划3.代码实现class Solution(object): def minCut(self, s): """ :type s: str :rtype: int """ N = len(s) dp = [N] * N原创 2021-03-08 22:05:31 · 160 阅读 · 0 评论 -
每日一题131-分割回文串
1.题目详情给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串。返回 s 所有可能的分割方案。2.解题思路没做出来,题解的回溯法看懂了。3.代码实现class Solution: def partition(self, s: str) -> List[List[str]]: res = [] def helper(s, tmp): if not s: res.a原创 2021-03-07 09:40:41 · 99 阅读 · 0 评论 -
每日一题503-下一个更大元素 II
1.题目详情给定一个循环数组(最后一个元素的下一个元素是数组的第一个元素),输出每个元素的下一个更大元素。数字 x 的下一个更大的元素是按数组遍历顺序,这个数字之后的第一个比它更大的数,这意味着你应该循环地搜索它的下一个更大的数。如果不存在,则输出 -1。2.解题思路暴力法,扩大1倍列表长度Orz3.代码实现class Solution: def nextGreaterElements(self, nums: List[int]) -> List[int]: num原创 2021-03-06 09:39:56 · 86 阅读 · 0 评论 -
每日一题12-整数转罗马数字
1.题目详情罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 XX + V + II原创 2021-03-05 11:47:39 · 152 阅读 · 0 评论 -
每日一题73-矩阵置零
1.题目详情给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0。请使用原地算法。2.解题思路因为只能当前数组中改,而每因为矩阵中某个值为0将所在行列变为0会改变整个矩阵的状态,因此遍历时需要记住所在行列为0的索引。3.代码实现class Solution: def setZeroes(self, matrix: List[List[int]]) -> None: """ Do not return anything原创 2021-03-04 13:05:11 · 99 阅读 · 1 评论 -
每日一题338-比特位计数
1.题目详情给定一个非负整数 num。对于 0 ≤ i ≤ num 范围中的每个数字 i ,计算其二进制数中的 1 的数目并将它们作为数组返回。2.解题思路暴力法,找每个数字转化为二进制后count1的个数。题解的动态规划也很奈斯。3.代码实现class Solution: def countBits(self, num: int) -> List[int]: arr = [] for i in range(num+1):原创 2021-03-03 13:04:54 · 69 阅读 · 0 评论 -
每日一题739-每日温度
1.题目详情请根据每日 气温 列表,重新生成一个列表。对应位置的输出为:要想观测到更高的气温,至少需要等待的天数。如果气温在这之后都不会升高,请在该位置用 0 来代替。例如,给定一个列表 temperatures = [73, 74, 75, 71, 69, 72, 76, 73],你的输出应该是 [1, 1, 4, 2, 1, 1, 0, 0]。2.解题思路首先要理解题意,举个栗子,索引为0时温度为73,当索引为1时温度74就比原来高,因此只过了一天就升温了,索引相减即为输出的第一个值1。同理,索原创 2021-03-02 10:28:07 · 143 阅读 · 0 评论 -
每日一题303-区域和检索 - 数组不可变
1.题目详情给定一个整数数组 nums,求出数组从索引 i 到 j(i ≤ j)范围内元素的总和,包含 i、j 两点。实现 NumArray 类:NumArray(int[] nums) 使用数组 nums 初始化对象int sumRange(int i, int j) 返回数组 nums 从索引 i 到 j(i ≤ j)范围内元素的总和,包含 i、j 两点(也就是 sum(nums[i], nums[i + 1], … , nums[j]))2.解题思路思路来源于力扣这是一道前缀和的裸题原创 2021-03-01 14:45:24 · 104 阅读 · 0 评论 -
每日一题6-Z 字形变换
1.题目详情将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行 Z 字形排列。比如输入字符串为 “PAYPALISHIRING” 行数为 3 时,排列如下:P A H NA P L S I I GY I R之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:“PAHNAPLSIIGYIR”。请你实现这个将字符串进行指定行数变换的函数:string convert(string s, int numRows);2.解题思路自己原创 2021-02-28 10:58:20 · 130 阅读 · 0 评论 -
每日一题134-加油站
1.题目详情在一条环路上有 N 个加油站,其中第 i 个加油站有汽油 gas[i] 升。你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i+1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发,开始时油箱为空。如果你可以绕环路行驶一周,则返回出发时加油站的编号,否则返回 -1。2.解题思路初始选择索引值时,要选择加油站的油要比消耗的油多,即gas[i] > cost[i]。转一周即跑一次列表的长度,每一次都需要判断油是否能支持下一次到加油站。3.代码实现这里是原创 2021-02-27 10:36:11 · 190 阅读 · 0 评论 -
每日一题392-判断子序列
1.题目详情给定字符串 s 和 t ,判断 s 是否为 t 的子序列。字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"是"abcde"的一个子序列,而"aec"不是)。2.解题思路双指针思想定义两个指针分别指向两个字符串的索引为0位置,若相等,s的指针移动。没循环一次,t的指针都要发生移动。3.代码实现class Solution: def isSubsequence(self, s: str, t: str) -&原创 2021-02-26 11:19:19 · 189 阅读 · 0 评论 -
每日一题867-转置矩阵
1.题目详情给你一个二维整数数组 matrix, 返回 matrix 的 转置矩阵 。矩阵的 转置 是指将矩阵的主对角线翻转,交换矩阵的行索引与列索引。2.解题思路转置矩阵,m行n列变成n行m列,行列的元素对应索引交换。因此直接交换行列索引即可。3.代码实现class Solution: def transpose(self, matrix: List[List[int]]) -> List[List[int]]: m = len(matrix)原创 2021-02-25 11:26:25 · 209 阅读 · 0 评论 -
每日一题63-不同路径 II
1.题目详情一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径?网格中的障碍物和空位置分别用 1 和 0 来表示。2.解题思路来源于力扣3.代码实现class Solution: def uniquePathsWithObstacles(self, obstacleGrid: Li原创 2021-02-24 12:28:57 · 229 阅读 · 0 评论 -
每日一题64-最小路径和
1.题目详情给定一个包含非负整数的 m x n 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:每次只能向下或者向右移动一步。2.解题思路动态规划问题,本题不用建额外的dp二维数组浪费时间。状态方程:grid[i][j] = min(grid[i - 1][j], grid[i][j - 1]) + grid[i][j]注意考虑边缘临界值3.代码实现class Solution: def minPathSum(self, grid: List[原创 2021-02-23 11:23:14 · 123 阅读 · 0 评论 -
每日一题62-不同路径
1.题目详情一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。问总共有多少条不同的路径?2.解题思路动态规划问题。n行m列说明最终路径里面一定会有n−1个向下的步骤和m−1个向右的步骤机器人到达目的地的最后一步,只可能是从[m-1][n]往下或者[m][n-1]往右到达所以到达dp[i][j]就可能是经过dp[i-1][j]到达,也可能是经过dp[i原创 2021-02-22 12:25:31 · 208 阅读 · 0 评论 -
每日一题746-使用最小花费爬楼梯
1.题目详情数组的每个下标作为一个阶梯,第 i 个阶梯对应着一个非负数的体力花费值 cost[i](下标从 0 开始)。每当你爬上一个阶梯你都要花费对应的体力值,一旦支付了相应的体力值,你就可以选择向上爬一个阶梯或者爬两个阶梯。请你找出达到楼层顶部的最低花费。在开始时,你可以选择从下标为 0 或 1 的元素作为初始阶梯。2.解题思路动态规划问题。由题意知,初始可选择在下标为0,1的台阶上。台阶一次可迈一步或两步。最小体力花费是 到达这个台阶前花费的最小体力 + 这个台阶花费的体力。而原创 2021-02-21 10:57:16 · 167 阅读 · 0 评论 -
每日一题70-爬楼梯
1.题目详情假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。2.解题思路递归,但容易超时。由题意知,一次只能迈一步或两步n阶台阶可看成,前n-1台阶迈一步,或者前n-2台阶迈两步。动态规划dp[i]: 爬到第i层楼梯,有dp[i]种方法从dp[i]的定义可以看出,dp[i] 可以有两个方向推出来。首先是dp[i - 1],上i-1层楼梯,有dp[i - 1]种方法,那么再一步跳一个台阶不原创 2021-02-20 11:27:24 · 165 阅读 · 0 评论 -
每日一题771-宝石与石头
1.题目详情给定字符串J 代表石头中宝石的类型,和字符串 S代表你拥有的石头。 S 中每个字符代表了一种你拥有的石头的类型,你想知道你拥有的石头中有多少是宝石。J 中的字母不重复,J 和 S中的所有字符都是字母。字母区分大小写,因此"a"和"A"是不同类型的石头。2.解题思路暴力for循环3.代码实现class Solution: def numJewelsInStones(self, jewels: str, stones: str) -> int: count原创 2021-02-19 13:58:05 · 61 阅读 · 0 评论 -
每日一题66-加一
1.题目详情给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。你可以假设除了整数 0 之外,这个整数不会以零开头。2.解题思路遍历列表,将列表字符串拼接到空字符串“”中,再将字符串转化为int类型进行+1计算,最后再转化为列表3.代码实现class Solution: def plusOne(self, digits: List[int]) -> List[int]: nums_原创 2021-02-18 19:47:38 · 102 阅读 · 0 评论 -
每日一题80-删除排序数组中的重复项 II
1.题目详情给定一个增序排列数组 nums ,你需要在 原地 删除重复出现的元素,使得每个元素最多出现两次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。2.解题思路设置两个指针,i,count。i负责遍历列表,count负责记录每个数字的次数,count初始为1。i 在遍历时如果nums[i] == nums[i-1],也就是与前一项数字相等,那么count计数加一。而由题意知,count只能小于等于2,因而当co原创 2021-02-17 11:13:12 · 76 阅读 · 1 评论 -
每日一题153-寻找旋转排序数组中的最小值
1.题目详情假设按照升序排序的数组在预先未知的某个点上进行了旋转。例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] 。请找出其中最小的元素。2.解题思路可直接暴力法求最小值min,但是若用例数量大,耗时。改良版二分查找思路如果中值 < 右值,则最小值在左半边,可以收缩右边界。如果中值 > 右值,则最小值在右半边,可以收缩左边界。通过比较中值与右值,可以确定最小值的位置范围,从而决定边界收缩的方向。3.代码实现class Solution原创 2021-02-16 11:51:09 · 224 阅读 · 0 评论 -
每日一题39-组合总和
1.题目详情给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的数字可以无限制重复被选取。说明:所有数字(包括 target)都是正整数。解集不能包含重复的组合。2.解题思路没什么好的思路,只能通过部分测试用例,看了题解完整题解回溯算法+剪枝解答3.代码实现class Solution: def combinationSum(self, candida原创 2021-02-15 11:58:53 · 264 阅读 · 0 评论 -
每日一题121-买卖股票的最佳时机
1.题目详情给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。2.解题思路动态规划(解析来源于力扣)动态规划一般分为一维、二维、多维(使用状态压缩),对应形式为 dp(i)dp(i)、dp(i)(j)dp(i)(j)、二进制dp(i)(j)二进制dp原创 2021-02-14 11:47:48 · 549 阅读 · 1 评论 -
每日一题461-汉明距离
1.题目详情两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目。给出两个整数 x 和 y,计算它们之间的汉明距离。2.解题思路法1左右指针分别指向两个二进制的数字,如果不同计数器加一法2异或^,二进制相同为0,不同为1,最后数出计算为1的个数3.代码实现class Solution: def hammingDistance(self, x: int, y: int) -> int: x = bin(x)[2:].zfill(32)原创 2021-02-13 21:34:37 · 293 阅读 · 0 评论 -
每日一题189-旋转数组
1.题目详情给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。2.解题思路可以用列表拼接的方式,把列表最后一个加上列表前边的或者把最后一个元素先挪最前边,再删除3.代码实现class Solution: def rotate(self, nums: List[int], k: int) -> None: """ Do not return anything, modify nums in-place instead.原创 2021-02-12 11:10:43 · 178 阅读 · 1 评论 -
每日一题448-找到所有数组中消失的数字
1.题目详情给定一个范围在 1 ≤ a[i] ≤ n ( n = 数组大小 ) 的 整型数组,数组中的元素一些出现了两次,另一些只出现一次。找到所有在 [1, n] 范围之间没有出现在数组中的数字。您能在不使用额外空间且时间复杂度为O(n)的情况下完成这个任务吗? 你可以假定返回的数组不算在额外空间内。2.解题思路列表去重后,完整遍历到n,如果n中元素不在原列表,就添加到新列表里。3.代码实现class Solution: def findDisappearedNumbers(se原创 2021-02-11 23:55:18 · 117 阅读 · 0 评论 -
每日一题260-只出现一次的数字 III
1.题目详情给定一个整数数组 nums,其中恰好有两个元素只出现一次,其余所有元素均出现两次。 找出只出现一次的那两个元素。你可以按 任意顺序 返回答案。2.解题思路可以偷懒用python中的count计数,遍历列表,count完为2,return。看了题解,用的异或算法先对所有数字进行一次异或,得到两个出现一次的数字的异或值。在异或结果中找到任意为 11 的位。根据这一位对所有的数字进行分组。在每个组内进行异或操作,得到两个数字。3.代码实现count方法class Soluti原创 2021-02-10 10:39:37 · 179 阅读 · 1 评论 -
每日一题845-数组中的最长山脉
1.题目详情我们把数组 A 中符合下列属性的任意连续子数组 B 称为 “山脉”:B.length >= 3存在 0 < i < B.length - 1 使得 B[0] < B[1] < … B[i-1] < B[i] > B[i+1] > … > B[B.length - 1](注意:B 可以是 A 的任意子数组,包括整个数组 A。)给出一个整数数组 A,返回最长 “山脉” 的长度。如果不含有 “山脉” 则返回 0。2.解题思路可以用原创 2021-02-09 11:26:45 · 221 阅读 · 0 评论 -
每日一题860-柠檬水找零
1.题目详情在柠檬水摊上,每一杯柠檬水的售价为 5 美元。顾客排队购买你的产品,(按账单 bills 支付的顺序)一次购买一杯。每位顾客只买一杯柠檬水,然后向你付 5 美元、10 美元或 20 美元。你必须给每个顾客正确找零,也就是说净交易是每位顾客向你支付 5 美元。注意,一开始你手头没有任何零钱。如果你能给每位顾客正确找零,返回 true ,否则返回 false 。2.解题思路根据题意,柠檬水只卖5元,并且顾客给钱就三种5,10,20。因此,顾客给5元时收着就行,不考虑找零,给10元原创 2021-02-08 10:33:53 · 495 阅读 · 1 评论