LeetCode
IAMIDA
这个作者很懒,什么都没留下…
展开
-
LeetCode # 861 行/列翻转矩阵,使各行代表的二进制数之和最大
行翻转和列翻转的顺序其实不影响最后结果,因此可以先考虑所有行都翻完,再翻转所有列;为了使最后相加的结果最大,显然应该使每一行都是尽量最高位为1,以加出最大的2的幂次方,根据翻转的规则,至少可以保证第一列全部翻为1(不是1的行做一下翻转即可),因此先进行行翻转把所有行的第一个值翻为1;剩下的列为了使他们总的加给结果的增益最大,显然应该从第二列往后,每列都是尽量使1最多,这可以通过对每列进行列翻转实现(如果这一列的0个数比1多,翻转该列即可)。为了提高效率,其实可以直接统计每列的1个数,然后取count.原创 2020-12-07 10:51:58 · 304 阅读 · 0 评论 -
LeetCode # 621 任务调度器
题目要求:给定一个任务列表tasks,没有顺序,其中元素为大写字母,各代表一个任务,同一个大写字母表示同一种任务;给定一个int值n,表示两个相同的任务之间必须要隔n个空的时间间隔,例如n=2表示两个任务‘A’间要安排等两个小时;现在要求计算:把这些任务按n个空位隔开,这样安排至少要安排为多长时间。返回一个int值。思想:两个相同任务间要隔n个位置,相当于如果有6个‘A’任务,那要把A任务全部做完,且每个之间相隔n,假设n=2,则至少要安排为:A _ _ A _ _ A _ _ A _ _原创 2020-12-05 16:20:13 · 255 阅读 · 0 评论 -
LeetCode #976 三角形最大周长
思想:组成三角形的充要条件:a+b>c。将A排序后,为了使周长最大,肯定是从后往前取,从最后一位c开始,依次判断前两位的数a, b之和是否比它大,只要满足,那a+c>b和b+c>a又一定成立(c已经大于a/b了),则abc可以构成三角形,且此时周长最大;如果不能满足,就继续往前找,直到找完所有A中元素。class Solution: def largestPerimeter(self, A: List[int]) -> int: res = 0原创 2020-11-29 15:48:50 · 174 阅读 · 0 评论 -
LeetCode # 283 数组里的0全都移到最后,其他保持原顺序
输入: [0, 1, 0, 3, 12]输出: [1, 3, 12, 0, 0]方法一(直接求非零元素的最终位置):用一个变量zero_num记录到目前为止遇到0的个数,当元素为0时就将其加一,然后跳过继续遍历下一个数;如果当前的数字不是0,根据zero_num我们可以知道它的最终位置。比如输入数组中,1之前出现过一个0,把这个0去除,等同于1要往前移一位;又如12之前出现过两个0,把这两个0去除,等同于12最终要往前移两位。所以每个非零数字当前下标减去zero_num就是它最终位置的下标,代表它原创 2020-11-19 10:34:22 · 505 阅读 · 0 评论 -
LeetCode #31 找出字典序下一个排列
字典序也就是从头开始,依次比较每个字符在ASCII码中的排位,例如a的排位在b之前,1的排位在3之前,如果字符相同,就继续往后比较。显然,一个只有数字的list要按字典序排列,以[1, 2, 3, 4]为例,应该为:[1, 2, 3, 4] -> [1, 2, 4, 3] -> [1, 3, 2, 4] -> [1, 3, 4, 2] -> [1, 4, 2, 3] -> [1, 4, 3, 2] -> [2, 1, 3, 4] -> [2, 1, 4, 3] -原创 2020-11-14 11:16:07 · 305 阅读 · 0 评论 -
Leetcode #328 链表奇偶节点分离
首先,链表的节点个数在2以下时(链表为空/只有一个节点/只有奇偶两个点)可以不用排序;题目的要求是让奇数点连成一条链,偶数点连成一条链,然后再把他们连接起来。所以整体思路是:用odd和even两个指针分别指向head和head.next,并奇、偶交替连接隔着的下下个点,即:# “=”左边的.next一般是指odd这个指针里存储的next地址值,右边的.next就是指odd指针指向的下一个节点。odd.next = odd.next.nexteven.next = even.next.next原创 2020-11-13 22:03:03 · 788 阅读 · 0 评论 -
LeetCode #53 求数组的最大子序列
题目分析:首先,要求的最大子序并没有规定长度,它的取值范围可以是1~len(num)。如果认为一段和为正值的子序列会对最终的最大子序产生增益效果,那和为非正值的子序列对最大和就没有任何增益。用sum记录当前的子序的和,依次考虑是否将后一个新的数值num加到sum上:如果加上新的数后sum>0,说明它对最大和ans是有增益效果的,那就可以把新的数字加上;如果加上新的数后sum<=0了,...原创 2020-02-11 22:24:30 · 128 阅读 · 0 评论