茶冻茶茶
这个作者很懒,什么都没留下…
展开
-
LeeCode213 打家劫舍2
思路如果打劫了第一家,则删去最后一家否则在最后加上第一家这样就形成了一个闭环def rob(nums): size = len(nums) if size == 1: return nums[0] dp = [0]*size dp[0] = nums[0] if nums[0]>nums[1]: #如果打劫了第一家,则删去最后一家 dp[1] = nums[0] nums.remove(nums[-1]原创 2021-08-29 13:40:06 · 196 阅读 · 0 评论 -
LeeCode263 264 丑数
思路丑数为只包含质因数 2、3 或 5 的正整数判断是否为丑数def isUgly(n): if n ==1 : return True p2,p3,p5 = 2,3,5 if n%2 == 0 : return True elif n%3 == 0 : return True elif n%5 == 0 : return True else:return FalseisUgly(5)原创 2021-08-27 22:41:15 · 163 阅读 · 0 评论 -
面试:按摩师
思路该题与leecode198.打家劫舍类似,不能接受相邻的预约,要使得总预约时间最长。先考虑两个、三个预约时间比较选了与不选该预约时间的总预约时长哪个最大def booking(time): size = len(time) dp = [0]*size #记录总预约时长 dp[0] = time[0] dp[1] = max(time[0],time[1]) for i in range(2,size): dp[i] = max(d原创 2021-08-27 20:54:40 · 193 阅读 · 0 评论 -
面试:三步问题
def climbStairs(n): if n<3: return n elif n == 3 : return 4 return climbStairs(n - 1) + climbStairs(n - 2) + climbStairs(n - 3)climbStairs(6)#24原创 2021-08-27 17:20:15 · 157 阅读 · 0 评论 -
LeeCode746 使用最小花费爬楼梯
思路目标: 最低体力消耗dp: 记录当前消耗体力确定起步: 前两步阶梯,选择消耗体力小的判断一步/两步: index为j-1与j哪个小消耗的体力如果走index为j-1则j+1,否则j+2最后 j不能大于sizedef MinCostClimbingStairs(cost): size = len(cost) dp = [0]*size j = 1 if size<3: return 0 for i in range(1,siz原创 2021-08-26 23:37:46 · 222 阅读 · 0 评论 -
LeeCode121 买卖股票的最佳时机
'''目标:收益最大dp:记录着收益确定买入:买入时机应是相邻左右的股票价格都比它大,是价格曲线的极小值卖出时机:dp最大值'''def besttime(prices): size = len(prices) dp = [0]*size tem = [] #存储价格极小值 for i in range(2,size): if prices[i-1]<prices[i-2] and prices[i-1]<prices[i]:原创 2021-08-26 21:10:20 · 141 阅读 · 0 评论 -
LeeCode128 最长连续序列
给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。def longest_continuous_sequence(nums): nums.sort() size = len(nums) dp = [0]*size dp[0] = 1 for i in range(1,size): if nums[i]-nums[i-1]==1: dp[i] = dp[i-1]+1 .原创 2021-08-22 21:49:28 · 165 阅读 · 0 评论 -
LeeCode322 零钱兑换
思路:目标是凑成总金额所需的 最少的硬币个数如果每次都取面额最大的来凑需要考虑的问题:amount能否被最大面额coin整除,或者减去多少能被整除amount余数接着被除直到余数为0def exchange_change(coins,amount): s = amount count = 0 coins.sort(reverse=True) for i in coins: n = s//i rem = s % i原创 2021-08-21 12:41:07 · 175 阅读 · 0 评论 -
LeeCode53 最大子序和
‘’’1、考虑1个元素 最大和就是本身2、考虑2个元素 最大和=max(nums[0],nums[1])3、考虑3个元素考虑正负,如果元素小于0,则转换状态‘’’翻译 2021-08-20 22:52:27 · 159 阅读 · 0 评论 -
LeeCode198 打家劫舍
'''1、子问题:-只考虑两个房子-考虑第三个房子2、确定状态-偷 与 不偷 当前金额是多少4、确定边界/初始状态-比较前两个房间金额,选最大5、状态转移'''翻译 2021-08-20 20:27:08 · 131 阅读 · 0 评论 -
LeeCode70 爬楼梯
'''一共要爬 n 阶,n >= 0;一次可以爬 1 或 2 个台阶;问爬 n 阶有多少种爬法(重点加粗了,问的是爬法,走是不算的)'''# 暴力解法def climbStairs(n): if n == 0 or n == 1: return 1 return climbStairs(n - 1) + climbStairs(n - 2) # f(n)只依赖于f(n-1)和f(n-2),只需要两项就足够了def climbStairs_(n):.翻译 2021-08-20 16:00:55 · 172 阅读 · 0 评论 -
LeeCode435 无重叠区间
# 动态规划求解'''本题换个意思就是:选出最多数量的区间,使得它们互不重叠1.构造结果的可能性2.判断情况3.得到最终结果'''def eraseOverlapIntervals(intervals): if not intervals: return 0 intervals.sort() n = len(intervals) f = [1]eraseOverlapIntervals([ [1,2], [2,3], [3,4翻译 2021-08-20 15:26:15 · 155 阅读 · 0 评论 -
LeeCode56.合并区间
以下为官方题解的内容,只是对代码进行解释def merge(intervals): intervals.sort(key=lambda x:x[0]) ''' key= 表示按哪个键排序 次数x[0]表示左端点,x[1]表示右端点 ''' merged = [] #存储无重叠的区间 for interval in intervals: #如果列表为空,或者当前区间(merged)右端点小于上一区间的做端点,则直接添加 if not merged or merged[-1][1]&l.翻译 2021-08-19 17:29:16 · 208 阅读 · 0 评论 -
【算法】求得重叠区域以及被重叠次数计算
import numpy as npdef get_intervals(intervals): ''' intervals:[[start1,end1],[start2,end2],...,[startn,endn]] return _list:返回重叠区间和重叠次数 ''' not_repeat_list = np.array(intervals) #intervals原为多维列表形式,现转为array,即多维数组形式,为了后续转为一维 not_repe原创 2021-08-19 16:17:05 · 1052 阅读 · 0 评论