记录了初步解题思路 以及本地实现代码;并不一定为最优 也希望大家能一起探讨 一起进步


目录

  • 7/25 919. 完全二叉树插入器
  • 7/26 1206. 设计跳表
  • 7/27 592. 分数加减运算
  • 7/28 1331. 数组序号转换
  • 7/29 593. 有效的正方形
  • 7/30 952. 按公因数计算最大组件大小
  • 7/31 1161. 最大层内元素和

7/25 919. 完全二叉树插入器

将节点放入队列中
从位置0算起 第i个位置节点的子节点位置为(i+1)*2-1 (i+1)*2
位置i的父节点为(i-1)//2 如果i为偶数为右子节点 i为奇数为左子节点

class TreeNode(object):def __init__(self, val=0, left=None, right=None):self.val = valself.left = leftself.right = right
class CBTInserter(object):def __init__(self, root):""":type root: TreeNode"""self.root = rootself.li = []l = [root]while l:tmp = []for node in l:if node.left:tmp.append(node.left)if node.right:tmp.append(node.right)self.li.append(node)l = tmp[:]def insert(self, val):""":type val: int:rtype: int"""node = TreeNode(val)loc = len(self.li)+1preloc = (loc-1)//2pre = self.li[preloc]if loc%2==1:pre.left = nodeelse:pre.right = nodeself.li.append(node)return pre.valdef get_root(self):""":rtype: TreeNode"""return self.root

7/26 1206. 设计跳表

参考 https://leetcode.cn/problems/design-skiplist/solution/she-ji-tiao-biao-by-leetcode-solution-e8yh/
将每个数字看作一个节点 节点最多有MAX_LEVAL层
如果对于某一层 该节点存在 则该位置指向下一个存在的节点
random_level 随机决定该节点层数

import random
MAX_LEVAL = 32
PRO = 0.25
def random_level():lv = 1while lv<MAX_LEVAL and random.random()<PRO:lv+=1return lvclass Node:__slots__ = ['val','forward']def __init__(self,val,maxlev=MAX_LEVAL):self.val = valself.forward = [None]*maxlevclass Skiplist(object):def __init__(self):self.head = Node(-1)self.level = 0def search(self, target):""":type target: int:rtype: bool"""cur = self.headfor i in range(self.level-1,-1,-1):while cur.forward[i] and cur.forward[i].val<target:cur = cur.forward[i]cur = cur.forward[0]if cur and cur.val==target:return Truereturn Falsedef add(self, num):""":type num: int:rtype: None"""new = [self.head]*MAX_LEVALcur = self.headfor i in range(self.level-1,-1,-1):while cur.forward[i] and cur.forward[i].val<num:cur = cur.forward[i]new[i] = curlv = random_level()self.level = max(self.level,lv)newnode = Node(num,lv)for i in range(lv):newnode.forward[i] = new[i].forward[i]new[i].forward[i] = newnodedef erase(self, num):""":type num: int:rtype: bool"""new = [self.head]*MAX_LEVALcur = self.headfor i in range(self.level-1,-1,-1):while cur.forward[i] and cur.forward[i].val<num:cur = cur.forward[i]new[i] = curcur = cur.forward[0]if not cur or cur.val!=num:return Falsefor i in range(self.level):if new[i].forward[i]!=cur:breaknew[i].forward[i] = cur.forward[i]while self.level>1 and not self.head.forward[self.level-1]:self.level-=1return True

7/27 592. 分数加减运算

分别提取出分子和分母
将不同的分母求乘积total 同时变化分子
将分子求和 并将和的结果与分母乘积辗转相除求最大公因数化简


def fractionAddition(expression):""":type expression: str:rtype: str"""fenzi = []fenmu = []cur = ""s = set()for c in expression:if c in ["+","-"]:if cur!="":fenmu.append(int(cur))s.add(int(cur))cur = celif c =="/":fenzi.append(int(cur))cur = ""else:cur+=cfenmu.append(int(cur))s.add(int(cur))total = 1for v in s:total *= vfor i in range(len(fenmu)):fenzi[i] *= total//fenmu[i]num = sum(fenzi)ans =""if num<0:ans = "-"num = -numif num==0:return "0/1"x,y = total,numwhile x%y>0:x,y = y,x%y  total //=ynum //=yans += str(num)+"/"+str(total)return ans

7/28 1331. 数组序号转换


def arrayRankTransform(arr):""":type arr: List[int]:rtype: List[int]"""l = sorted(arr)m = {}num = 1print(l)for i,v in enumerate(l):if i>0 and l[i-1]<v:num +=1m[v] = numans = [0]*len(arr)for i,v in enumerate(arr):ans[i] = m[v]return ans

7/29 593. 有效的正方形

考虑点重叠情况
dis计算a,b点之间的线的平方
任选三个点 得到三条边
构成等边直角三角形
需要存在两条边相等=bian 两条边平方等于另一条边平方
如果存在可以确定直角顶点ding 和斜边两个点
第四个点与斜边两点连接的两条边长度 也需要等于bian
同时与顶点连接长度等于斜边

def validSquare(p1, p2, p3, p4):""":type p1: List[int]:type p2: List[int]:type p3: List[int]:type p4: List[int]:rtype: bool"""if p1==p2 or p3==p4:return Falsedef dis(a,b):return (a[0]-b[0])**2+(a[1]-b[1])**2points = []ding = []a = dis(p1,p2)b = dis(p2,p3)c = dis(p3,p1)bian = 0if a==b and a+b==c:bian = apoints = [p1,p3]ding = p2elif a==c and a+c==b:bian = apoints = [p2,p3]ding = p1elif b==c and b+c==a:bian = bpoints = [p1,p2]ding = p3else:return Falseif dis(p4,ding)!=2*bian:return Falsefor p in points:l = dis(p4,p)if l!=bian:return Falsereturn True

7/30 952. 按公因数计算最大组件大小

并查集 将num和其因数归为一组
遍历nums的每个num
找到num所有质因数
将其与其质因数划分为一组

class UnionFind:def __init__(self, n):self.parent = list(range(n))self.rank = [0] * ndef find(self, x):if self.parent[x] != x:self.parent[x] = self.find(self.parent[x])return self.parent[x]def union(self, x, y):x, y = self.find(x), self.find(y)if x == y:returnif self.rank[x] > self.rank[y]:self.parent[y] = xelif self.rank[x] < self.rank[y]:self.parent[x] = yelse:self.parent[y] = xself.rank[x] += 1def largestComponentSize(nums):""":type nums: List[int]:rtype: int"""from collections import Countern = max(nums)+1uf = UnionFind(n)for num in nums:tmp = numi = 2while i*i<=tmp:if tmp%i==0:while tmp%i==0:tmp //=iuf.union(num,i)i+=1if tmp>1:uf.union(num,tmp)return max(Counter(uf.find(x) for x in nums).values())

7/31 1161. 最大层内元素和

BFS 按层遍历

class TreeNode(object):def __init__(self, val=0, left=None, right=None):self.val = valself.left = leftself.right = rightdef maxLevelSum(root):""":type root: TreeNode:rtype: int"""lel = 1maxv = float("-inf")l = [root]ans = 0while l:tmp = []total = 0for node in l:total += node.valif node.left:tmp.append(node.left)if node.right:tmp.append(node.right)if maxv<total:ans = lelmaxv = totall = tmplel+=1return ans

LeetCode 每日一题 2022/7/25-2022/7/31相关推荐

  1. Leetcode 每日一题双题版(2.25+2.24)模拟练细节

    Leetcode 每日一题双题版(2.25+2.24)模拟练细节 前言 刚刚敲了今天刷新的题目,然后昨天的也写了,就想着更新一下blog 两道题都是模拟题,对于模拟,我的看法就是看懂题目,拿捏细节,难 ...

  2. leetcode每日刷题计划-简单篇day8

    leetcode每日刷题计划-简单篇day8 今天是纠结要不要新买手机的一天QAQ想了想还是算了吧,等自己赚钱买,加油 Num 70 爬楼梯 Climbing Stairs class Solutio ...

  3. Leetcode每日一题:171.excel-sheet-column-number(Excel表列序号)

    思路:就是168题的反命题,进制的方式完美解决: Leetcode每日一题:168.excel-sheet-column-title(Excel表名称) class Solution {public: ...

  4. 【LeetCode每日一题】1723. 完成所有工作的最短时间

    [LeetCode每日一题]1723. 完成所有工作的最短时间 [1] 1723. 完成所有工作的最短时间 [2] 473. 火柴拼正方形 [1] 1723. 完成所有工作的最短时间 题目: 给你一个 ...

  5. leetcode每日一题--雀巢原理;抽屉算法;Quorum机制;分布式应用

    leetcode每日一题 539. 最小时间差 示例 1: 输入:timePoints = ["23:59","00:00"] 输出:1 示例 2: 输入:ti ...

  6. LeetCode每日一题——1812. 判断国际象棋棋盘中一个格子的颜色

    LeetCode每日一题系列 题目:1812. 判断国际象棋棋盘中一个格子的颜色 难度:简单 文章目录 LeetCode每日一题系列 题目 示例 思路 题解 题目 给你一个坐标 coordinates ...

  7. 【LeetCode每日一题】——109.有序链表转换二叉搜索树

    文章目录 一[题目类别] 二[题目难度] 三[题目编号] 四[题目描述] 五[题目示例] 六[题目提示] 七[解题思路] 八[时间频度] 九[代码实现] 十[提交结果] 一[题目类别] 二叉树 二[题 ...

  8. leetcode每日一题·救生艇问题(Python)

    leetcode每日一题·救生艇问题(Python) 问题描述 题目入口 题目思路 首先分析问题,一个船最多坐两人,因此我们可以把这个问题看作两两组合的问题,并且如果最重的那个人和最轻的人加起来大于l ...

  9. LeetCode每日一题——904. 水果成篮

    LeetCode每日一题系列 题目:904. 水果成篮 难度:普通 文章目录 LeetCode每日一题系列 题目 示例 思路 题解 题目 你正在探访一家农场,农场从左到右种植了一排果树.这些树用一个整 ...

  10. LeetCode每日一题打卡组队监督!刷题群!

    近 2000 人已经加入共同刷题啦! 群友每天都会在群里给大家讲解算法题 每周日「负雪明烛」组织直播讲题 我相信来看我博客的大部分人都是通过LeetCode刷题过来的.最近发现LeetCode中文网站 ...

最新文章

  1. Spark的RDD转换算子
  2. ACM-ICPC 2018 南京赛区网络预赛 L. Magical Girl Haze 最短路+分层图
  3. SimpleDateFormat使用详解 转
  4. 深度学习核心技术精讲100篇(四十六)-情感分析算法在阿里小蜜的应用实践
  5. 1044 拦截导弹——http://codevs.cn/problem/1044/
  6. 【Linux】一步一步学Linux——Linux系统常用快捷键(12) 待更新...
  7. 算法7-10:拓扑排序
  8. 蓝色中国风传统图案背景素材
  9. CentOS7没有telnet命令的解决方法
  10. 设计模式:JavaScript
  11. mysql 存储过程 高并发_解决数据库高并发常见方案
  12. windows下namp的基本操作命令
  13. CAN FD安全通信
  14. python语言判断中国节假日(pip install chinesecalendar)
  15. 静态内部类、静态变量的加载次数-理解静态内部类实现线程安全的单例模式懒加载
  16. 未来教育1级计算机基础及ms,未来教育.全国计算机等级考试一本通一级计算机基础及MS Office应用...
  17. 老男孩python2020年31期学习记录贴
  18. veket linux安装到硬盘,安装veket到移动硬盘NTFS分区
  19. oracle 物料属性批次过期,系列之五:ORACLE EBS 系统主数据管理(C)
  20. git 修改倒数二个 commit

热门文章

  1. chrome同步书签实现
  2. Delmia Com二次开发
  3. error during connect: Get http://%2F%2F.%2Fpipe%2Fdocker_engine/v1.28/version: open //./pipe/docker_
  4. Android地图应用闪退,android 第二次打开场景闪退
  5. 项目管理中的工具与技术----项目范围管理中的工具与技术
  6. 11、分布式爬虫(一)
  7. GIS二维电子地图开发总结
  8. openGL学习之glut库的使用
  9. 适合Java零基础小白学习的Java零基础教程
  10. 机器视觉HALCON软件学习总结