LeetCode练习题
叫小侯的小白程序员
在校研究生
展开
-
消灭怪物的最大数量【力扣1921】
需要满足的条件:游戏最优策略:我们可以在每分钟的开始都使用一次武器,用来杀死距离城市最近的怪兽。这样可以在力所能及的范围内,杀死最多的怪兽。示例1中打怪兽的策略可以打死 3只怪兽,其实也可以换成这样的打法:注意:我认为示例1中的方法不是“最优”策略。另外大家不要被这个示例误解,看第二步的时候,竟然没有消灭任何怪物,会误认为只有怪物和城市距离为1才能打死怪物;或者误认为只有在第i分钟内才能到达的怪物,才可以在i分钟时消灭。我们可以计算,每一个怪物最晚被消灭的时间,然后对时间进行排序。可以晚点消灭的怪物就会被排原创 2023-09-03 15:09:13 · 380 阅读 · 0 评论 -
买卖股票的最佳时机【力扣121】
假如我们要在第 i 天卖出股票,那么为了获得最大利润,买股票的最佳时间是第 i 天前的最低股价的那一天。我们使用min来记录已经访问过的 0-i 天的最低股价。那么在第 i 天,如果股价大于min,那么最大利润为price[i]-min;否则最大利润为0,并且min=price[i]。原创 2023-08-22 14:56:39 · 253 阅读 · 1 评论 -
最大子数组和【力扣53】
Max[i]表示:以nums[i]为开头的所有连续子数组和的最大值。由此可以推出Max[i-1]和Max[i]的关系:若Max[i]>=0:Max[i-1]=nums[i-1]+Max[i];否则:Max[i-1]=nums[i-1];则ans=MAX(Max[0]、Max[1]、......、Max[n-1])原创 2023-08-09 17:13:08 · 303 阅读 · 0 评论 -
任意子数组和的绝对值的最大值【力扣1749】
设n表示数组的长度,Min[i]是以nums[i]为开头组成的任意连续子数组中的和最小值(若所有子数组的和都大于0,则Min[i]设为0。也就是说丢弃所有子数组);Max[i]是以nums[i]为开头组成的任意连续子数组中的和最大值(若所有子数组的和都小于0,则Max[i]设为0)。由此可以继续推算Min[i-1]和Max[i-1]:若nums[i-1]<=0:Min[i-1]=nums[i-1]+Min[i]若nums[i-1]+Max[i]>0:Max[i-1]=nums[i-1]+Max[i]原创 2023-08-09 16:35:47 · 366 阅读 · 0 评论 -
翻转卡片游戏【力扣822】
如果卡片上正面和背面的数字相同,都为x,那么x一定不符合要求,将这些数都记录到哈希表hash中。剩下的卡片正反面数字不相同,那么不在hash中的数字中的最小数min一定是答案。因为若min跟现在front数组中的某些数相同(这个数不会是hash中的数),则将那些个相同的卡片正反面兑换(这些卡片一定正反面数据不同),就可以实现min与front数组中的所有数都不相同。原创 2023-08-05 12:49:13 · 504 阅读 · 0 评论 -
英雄的力量【力扣2681】
将数组按从大到小的顺序排列,i<=j,那么以nums[i]开始,nums[j]结尾,i----j中的任意数,组成的排列,其英雄力量都是nums[i]*nums[i]*nums[j];因此可以设置双重循环遍历数组,来计算总的英雄的力量。时间复杂度为O(n^2),会超时。原创 2023-08-01 17:25:52 · 274 阅读 · 0 评论 -
圆和矩形是否有重叠【力扣1401】
那么只要圆心的位置在虚线范围内(包括虚线),圆和矩形一定有重合的地方。原创 2023-06-25 21:27:52 · 101 阅读 · 0 评论 -
可被三整除的最大和【力扣1262】
nums数组中的数可以分为三种类型s0,s1,s2;s0表示除以3余0的数,s1表示除以3余1的数;找出能被三整除的元素最大和sum,那么sum中包含全部s0,以及s1和s2组成的能被三整除的数(比如三个余1的数、一个余1一个余2的数、三个余2的数,等)。设s1中有l1个数,s2中有l2个数。如果sum=s0+s1+s2(贪心算法),则sum%3= (l1+2*l2)%3=r。原创 2023-06-21 12:51:42 · 111 阅读 · 0 评论 -
位1的个数【力扣191】
n&(n-1)的计算结果,恰好是将n的二进制形式的最后一个1变成0。例如,6&(6-1)=4,6=(110),4=(100);原创 2023-06-15 16:16:26 · 58 阅读 · 0 评论 -
数组中不等三元组的数目【力扣2475】
我们可以将数组排序,假设下标[i,j)是相同的数,他的前面有i个和他不一样的数,他的后面有n-j个和他不一样的数,因此把下标[i,j)的数作为中间值,可以组出i*(j-i)*(n-j)个组合。但是换个角度想,在数组中任取三个数a,b,c,三个数互不相同。不管a,b,c谁前谁后,只要他们三个满足互不相同的条件,就一定存在这个组合。最开始做这个题,我一直头疼 i < j < k 这个条件,觉得只有暴力才能解决。下标互不相同,数据互不相同,也就是说相同的数据,他们也属于不同的独立个体。原创 2023-06-13 11:46:52 · 117 阅读 · 0 评论 -
老鼠和奶酪【力扣2611】
记录做题思路,便于以后二刷和复习原创 2023-06-07 18:06:01 · 89 阅读 · 0 评论 -
负二进制数相加【力扣1073】
解释为啥进位的时候carry要等于1:sum大于等于10的时候,说明超出了第i位的表示范围,必须向高位i+1进位。此时第i位表示的数换成十进制是sum*10^i=(sum-10)*10^i +最初看到这题的时候,我很懵逼,世上咋还会有基数是负数的情况?,10*10^i是超出部分,这部分无非就是向i+1位进1。原创 2023-05-18 23:00:38 · 106 阅读 · 0 评论 -
困于环中的机器人【力扣1041】
力扣题思路原创 2023-04-12 11:47:09 · 73 阅读 · 0 评论 -
链表中的下一个更大节点【力扣1019】
力扣《链表中的下一个更大节点》解题思路原创 2023-04-10 17:14:24 · 97 阅读 · 0 评论 -
两数相除(29题)
力扣上《两数相除》这道题的求解方法原创 2023-03-17 18:17:54 · 45 阅读 · 0 评论