LeetCode 每日一题 2023/12/11-2023/12/17

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


目录

      • 12/11 1631. 最小体力消耗路径
      • 12/12 2454. 下一个更大元素 IV
      • 12/13 2697. 字典序最小回文串
      • 12/14 2132. 用邮票贴满网格图
      • 12/15 2415. 反转二叉树的奇数层
      • 12/16 2276. 统计区间中的整数数目
      • 12/17 746. 使用最小花费爬楼梯


12/11 1631. 最小体力消耗路径

dijstra
最小堆 找到当前最小的路径

import heapq
def minimumEffortPath(heights):""":type heights: List[List[int]]:rtype: int"""m,n = len(heights),len(heights[0])dist = [0]+[float("inf")]*(m*n-1)q = [(0,0,0)]path =set()while q:d,x,y = heapq.heappop(q)idx = x*n+yif idx in path:continueif (x,y)==(m-1,n-1):breakpath.add(idx)for xx,yy in [(x-1,y),(x+1,y),(x,y-1),(x,y+1)]:if 0<=xx<m and 0<=yy<n:maxd = max(d,abs(heights[x][y]-heights[xx][yy]))if maxd<=dist[xx*n+yy]:dist[xx*n+yy] = maxdheapq.heappush(q,(dist[xx*n+yy],xx,yy))return dist[m*n-1]

12/12 2454. 下一个更大元素 IV

将数值从大到小排序 并记录其坐标(num,i)
使用一个有序队列s记录已经处理过的坐标
对于当前处理的nums[x] s中所有数值都比其大 只要找到比x大的下下个元素值
即为nums[x]对应的第二大元素坐标

def secondGreaterElement(nums):""":type nums: List[int]:rtype: List[int]"""from sortedcontainers import SortedListl = [(x,i) for i,x in enumerate(nums)]l.sort(key=lambda x:-x[0])s = SortedList()n = len(nums)ans = [-1]*nfor _,i in l:loc = s.bisect_right(i)if loc+1<len(s):ans[i] = nums[s[loc+1]]s.add(i)return ans

12/13 2697. 字典序最小回文串

左右指针依次比较 对应的位置需要相同且使用字典序小的字母

def makeSmallestPalindrome(s):""":type s: str:rtype: str"""l,r=0,len(s)-1li = [""]*len(s)while l<=r:c = s[l]if s[r]<s[l]:c=s[r]li[l]=li[r]=cl+=1r-=1return ''.join(li)

12/14 2132. 用邮票贴满网格图

二维前缀和判断是否可以贴邮票
二维差分判断是否所有空格子被覆盖

def possibleToStamp(grid, stampHeight, stampWidth):""":type grid: List[List[int]]:type stampHeight: int:type stampWidth: int:rtype: bool"""m,n=len(grid),len(grid[0])psum = [[0]*(n+2) for _ in range(m+2)]diff = [[0]*(n+2) for _ in range(m+2)]for i in range(1,m+1):for j in range(1,n+1):psum[i][j] = psum[i-1][j]+psum[i][j-1]-psum[i-1][j-1]+grid[i-1][j-1]for i in range(1,m+2-stampHeight):for j in range(1,n+2-stampWidth):x = i+stampHeight-1y = j+stampWidth-1if psum[x][y]-psum[x][j-1]-psum[i-1][y]+psum[i-1][j-1]==0:diff[i][j]+=1diff[i][y+1]-=1diff[x+1][j]-=1diff[x+1][y+1]+=1for i in range(1,m+1):for j in range(1,n+1):diff[i][j] += diff[i-1][j]+diff[i][j-1]-diff[i-1][j-1]if diff[i][j]==0 and grid[i-1][j-1]==0:return Falsereturn True

12/15 2415. 反转二叉树的奇数层

BFS

class TreeNode(object):def __init__(self, val=0, left=None, right=None):self.val = valself.left = leftself.right = rightdef reverseOddLevels(root):""":type root: Optional[TreeNode]:rtype: Optional[TreeNode]"""li = [root]lev = 0while len(li)>0:if lev%2==1:l,r=0,len(li)-1while l<r:x,y = li[l],li[r]x.val,y.val=y.val,x.vall+=1r-=1tmp=[]for node in li:if not node.left:breaktmp.append(node.left)tmp.append(node.right)lev+=1li = tmpreturn root

12/16 2276. 统计区间中的整数数目

线段树
l,r为左右端点 cnt为区间内整数个数
如果当前区间全覆盖 则cnt=r-l+1

class CountIntervals(object):def __init__(self,l=1,r=10**9):self.left = self.right = Noneself.l,self.r,self.cnt=l,r,0def add(self, left, right):""":type left: int:type right: int:rtype: None"""if self.cnt == self.r-self.l+1:returnif left<=self.l and self.r<=right:self.cnt = self.r-self.l+1returnmid = (self.l+self.r)//2if self.left is None:self.left = CountIntervals(self.l,mid)if self.right is None:self.right = CountIntervals(mid+1,self.r)if left<=mid:self.left.add(left,right)if mid<right:self.right.add(left,right)self.cnt = self.left.cnt+self.right.cntdef count(self):""":rtype: int"""return self.cnt

12/17 746. 使用最小花费爬楼梯

当前i楼梯可以由 i-1,i-2到达

def minCostClimbingStairs(cost):""":type cost: List[int]:rtype: int"""f1,f2=0,0for i in cost:f1,f2=i+min(f1,f2),f1ret = min(f1,f2)return ret

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/227935.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

写好ChatGPT提示词原则之:清晰且具体(clear specific)

ChatGPT 的优势在于它允许用户跨越机器学习和深度学习的复杂门槛&#xff0c;直接利用已经训练好的模型。然而&#xff0c;即便是这些先进的大型语言模型也面临着上下文理解和模型固有局限性的挑战。为了最大化这些大型语言模型&#xff08;LLM&#xff09;的潜力&#xff0c;关…

linux远程登录

标题: Linux远程登录: 实现远程管理和访问的有效工具 摘要: 本文将介绍Linux系统中的远程登录功能&#xff0c;探索实现远程管理和访问的有效工具和技术。通过远程登录&#xff0c;用户可以方便地管理远程服务器、执行命令和访问文件。本文将讨论SSH、VNC和Web远程登录等常见的…

Spring 6(二)【IOC原理】

前言 1、IOC IoC 是 Inversion of Control 的简写&#xff0c;译为“控制反转”&#xff0c;它不是一门技术&#xff0c;而是一种设计思想&#xff0c;是一个重要的面向对象编程法则&#xff0c;能够指导我们如何设计出松耦合、更优良的程序。 1.1、控制反转 控制反转不是技术…

复杂指针的声明

一个整型数 int a; 一个指向整型数的指针 int *a; 一个指向指针的指针&#xff0c;它指向的指针是指向一个整型数的 int **a; 一个有10个整型数的数组 int a[10]; 一个有10个指针的数组&#xff0c;该指针是指向一个整型数的 int *a[10]; 一个指向有10个整型数数组的…

常见编码方式

文章目录 讲一下常见编码方式&#xff1f;ASCII 码&#xff1a;ISO-8859-1,GB2312:GBKUTF-16:UnicodeUTF-8&#xff1a; 今天我们来谈谈常见的编码 讲一下常见编码方式&#xff1f; 编码的意义&#xff1a;计算机中存储的最小单元是一个字节即 8bit&#xff0c;所能表示的字符…

visual Studio MFC 平台实现图片的傅里叶变换

图片的傅里叶变换 本文主要讲解傅里叶变换的基本数学概念与物理概念&#xff0c;并本文使用visual Studio MFC 平台实现对傅里叶变换在图片上进行了应用。 一、傅里叶变换的原理 在这里推荐一篇讲得非常形象的文章通俗讲解&#xff1a;图像傅里叶变换 1.1 傅里叶变换原理的说明…

Andriod逆向--让APP自己吐出Token

0. 抓包?Or 修改APP? 安卓APP本质上就是发送URL+一堆参数的一个客户端而已,而其中一般有两个重要的参数:TOKEN(标识用户的唯一性),另一个是防止逆向而设计的一个参数(往往由其它参数通过一个算法算出)。 今天我们的目的就是抓到TOKEN,如果可以抓包,那就是简单了。…

idea__SpringBoot微服务11——整合Druid数据源(新依赖)(新注解)

整合JDBC 一、导入依赖二、配置Druid————————创作不易&#xff0c;如觉不错&#xff0c;随手点赞&#xff0c;关注&#xff0c;收藏(*&#xffe3;︶&#xffe3;)&#xff0c;谢谢~~ 接着 第10的 新注解&#xff1a; ConfigurationProperties ConfigurationPropert…

Kafka-生产调优

Kafka生产调优实践 通常在生产环境中&#xff0c;Kafka都是用来应对整个项目中最高峰的流量 搭建Kafka监控平台 生产环境通常会对Kafka搭建监控平台。而Kafka-eagle就是一个可以监控Kafka集群整体运行情况的框架&#xff0c;在生产环境经常会用到。官网地址&#xff1a;EFAK…

redis底层数据结构之skiplist实现

skiplist实现 skiplist跳跃表&#xff0c;是一种有序数据结构&#xff0c;通过在每个节点中维持多个指向其他节点的指针&#xff0c;来达到快速访问节点的目的&#xff0c;redis使用skiplist作为zsort的底层实现之一 结构很像树形结构 typedef struct zskiplistNode { // 对象…

【人工智能】实验四:遗传算法求函数最大值实验与基础知识

实验四&#xff1a;遗传算法求函数最大值实验 实验目的 熟悉和掌握遗传算法的原理、流程和编码策略&#xff0c;并利用遗传算法求解函数优化问题&#xff0c;理解求解流程并测试主要参数对结果的影响。 实验内容 采用遗传算法求解函数最大值。 实验要求 1. 用遗传算法求解…

3. cgal 示例 GIS (Geographic Information System)

GIS (Geographic Information System) 地理信息系统 原文地址: https://doc.cgal.org/latest/Manual/tuto_gis.html GIS 应用中使用的许多传感器&#xff08;例如激光雷达&#xff09;都会生成密集的点云。此类应用程序通常利用更先进的数据结构&#xff1a;例如&#xff0c;不…

053:vue工具--- 英文字母大小写在线转换

第047个 查看专栏目录: VUE ------ element UI 专栏目标 在vue和element UI联合技术栈的操控下&#xff0c;本专栏提供行之有效的源代码示例和信息点介绍&#xff0c;做到灵活运用。 &#xff08;1&#xff09;提供vue2的一些基本操作&#xff1a;安装、引用&#xff0c;模板使…

QEMU源码全解析 —— virtio(13)

接前一篇文章&#xff1a; 通过前文书&#xff08;从QEMU源码全解析 —— virtio&#xff08;9&#xff09;开始&#xff09;对整个流程以及各个相关函数的解析&#xff0c;可以看到从virtio PCI代理设备的具现化到virtio设备的具现化过程。但前述分析还遗漏了一部分&#xff0…

LeetCode(69)对称二叉树【二叉树】【简单】

目录 1.题目2.答案3.提交结果截图 链接&#xff1a; 对称二叉树 1.题目 给你一个二叉树的根节点 root &#xff0c; 检查它是否轴对称。 示例 1&#xff1a; 输入&#xff1a;root [1,2,2,3,4,4,3] 输出&#xff1a;true示例 2&#xff1a; 输入&#xff1a;root [1,2,2,nu…

朱卫明:从韶关走向世界的创作型歌手

朱卫明&#xff0c;艺名Aming&#xff0c;是一位来自广东韶关的杰出唱作音乐人。他以其独特的创作才华和深情的嗓音&#xff0c;赢得了众多歌迷的喜爱。作为一名创作型歌手&#xff0c;朱卫明用音乐传递情感&#xff0c;用歌声打动人心。 一、早年经历与音乐启蒙 朱卫明出生于…

Python开发工具PyCharm v2023.3全新发布——全面推出AI Assistant工具

JetBrains PyCharm是一种Python IDE&#xff0c;其带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具。此外&#xff0c;该IDE提供了一些高级功能&#xff0c;以用于Django框架下的专业Web开发。 PyCharm v2023.3正式版下载 在 PyCharm 2023.3 中&#xff0c;每…

Linux Shell——输入输出重定向

输入输出重定向 1. 重定向输入2. 重定向输出 总结 最近学习了shell语法&#xff0c;总结一下关于输入输出重定向的知识。 一般情况下&#xff0c;linux每次执行命令其实都会打开三个文件&#xff0c;分别是&#xff1a; 标准输入stdin 文件描述符为0 标准输出stdout 文件描述符…

Text2SQL学习整理(一) 综述

数据库由一张或多张表格构成&#xff0c;表格之间的关系通过共同的列&#xff08;外键&#xff09;关联&#xff0c;人们使用数据库来方便的记录和存储信息。SQL是广泛应用的关系型数据库查询语言&#xff0c;但是对于普通用户而言&#xff0c;编写SQL语句有一定的难度。 Text…

第16课 SQL入门之更新和删除数据

文章目录 16.1 更新数据16.2 删除数据16.3 更新和删除的指导原则 这一课介绍如何利用UPDATE和DELETE语句进一步操作表数据。 16.1 更新数据 更新&#xff08;修改&#xff09;表中的数据&#xff0c;可以使用UPDATE语句。有两种使用UPDATE的方式&#xff1a; 更新表中的特定行…