leetcode

Contest132:

1028. Recover a Tree From Preorder Traversal

定义一个栈用于存放树节点,循环遍历S,在每次循环中,记录'-'的个数dep,记录节点值val,构造树节点node(val);栈顶元素出栈知道栈中元素数小于等于dep;若栈非空,若栈顶元素的左子树为空,则node赋值给栈顶元素的左子树,否则node赋值给栈顶元素的右子树;node进栈。最后返回栈底元素。

1027. Longest Arithmetic Sequence

动态规划,子问题是下标为0-k(k < A.size())的子串的“Longest Arithmetic Sequence”。dp[j][diff],到下标为j且j指向的元素与前面的元素差为diff的“Longest Arithmetic Sequence ”。

1025. Divisor Game

“assuming both players play optimally”,即每个选手每次都会选最佳选择。

Contest131:

1024. Video Stitching

构建一维数组nums,长度为原数组能覆盖的最大范围+1,初始值为-1,数组下标为clips中的左侧值,其元素值为右侧值。从左向右遍历nums,若nums[i]

1022. Sum of Root To Leaf Binary Numbers

从根节点到每一个路径上的叶节点是一个数,深度优先遍历

Contest130:

1017. Convert to Base -2

基本思想除2趋于倒叙,但是在取余数的过程要把商取反,即 while x: res.append(x & 1) x = -(x >> 1)

1019. Next Greater Node In Linked List

采用单调栈算法,结果为一个llist类型的res,初始化为长度为链表节点数,长度为0,定义一个单调递减栈s节点下标(从0开始),一个字典dt存储下标到节点值的映射:

1) 遍历链表head,当前节点为q,若q为空跳转到5)

2)否则,若栈s为空,q节点对应的下标进栈,跳转到1),否则,循环遍历栈s最后一个元素

3)  若dt[s[-1]]  < q.val,执行s出栈操作,令res[s[-1]] = q.val ,跳转到2)

4) 否则,q节点对应的下标入栈,跳转到1)

5)循环结束,返回res

1020. Number of Enclaves

检查矩阵的边缘A[i][j],若果A[i][j] == 1,对A做DFS运算,把相邻的1都改为0,最后,返回剩下的1的个数


Contest129:

1020. Partition Array Into Three Parts With Equal Sum

数列的所有元素和summ能被3整除,数列能被划分为三段连续的子数列

1021. Best Sightseeing Pair

if A[i] < A[j] + j - i: i = j

1022. Smallest Integer Divisible by K

如果K不能整除1...1,则next_mod = (10 * pre_mod + 1) // K,mods构成一个循环且都不为0

1023. Binary String With Substrings Representing 1 To N


Contest128:

1013. Pairs of Songs With Total Durations Divisible by 60

1)、时间复杂度O(n),否则会TLE

2)python求模运算:m = a % n ,即40 %  60 = 40,-40 % 60 = 20        m = a % n  -> m = a - n * (a // n),40 // 60 = 0, -40 // 60 = -1  

1014. Capacity To Ship Packages Within D Days

二分查找

1015. Numbers With Repeated Digits

计算数中各个位没有重复数字的数目res,结果为N - res

1)、定义一个没有重复数字的全排列函数permulation,参数m:int(可用数字个数), n:int(数的位数),返回长度为n的数字中各个位上的数字没有重复的数的个数

2)、计算长度小于数字N的长度中的res数目,计算长度与N相等的数字的res数目

你可能感兴趣的:(leetcode)