当前位置: 首页 > news >正文

LeetCode 每日一题 2024/3/18-2024/3/24

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


目录

      • 3/18 303. 区域和检索 - 数组不可变
      • 3/19 1793. 好子数组的最大分数
      • 3/20 1969. 数组元素的最小非零乘积
      • 3/21 2671. 频率跟踪器
      • 3/22 2617. 网格图中最少访问的格子数
      • 3/23 2549. 统计桌面上的不同数字
      • 3/24 322. 零钱兑换


3/18 303. 区域和检索 - 数组不可变

前缀和
nums[x]记录0~x的元素和
计算i~j之间的元素和为nums[j]-nums[i-1]即可

class NumArray(object):def __init__(self, nums):""":type nums: List[int]"""pre = 0self.nums = [0]for n in nums:pre+=nself.nums.append(pre)def sumRange(self, i, j):""":type i: int:type j: int:rtype: int"""return self.nums[j+1]-self.nums[i]

3/19 1793. 好子数组的最大分数

双指针
为了确定l,r 两个都从k开始向左向右移动
比较哪一边的数值较大则往哪边移动
minv记录当前区间最小值

def maximumScore(nums, k):""":type nums: List[int]:type k: int:rtype: int"""n = len(nums)minv = nums[k]ans = nums[k]l = r = kfor _ in range(n-1):if r == n-1 or l>0 and nums[l-1]>nums[r+1]:l-=1minv = min(minv,nums[l])else:r+=1minv = min(minv,nums[r])ans = max(ans,minv*(r-l+1))return ans

3/20 1969. 数组元素的最小非零乘积

每一次操作 并不会改变元素的和
而在元素和不变的情况下 要想使得乘积最小应该尽可能最大化元素的差值
最大的元素为 2p-1 无论怎么交换 差值不会变大 不考虑
剩余元素可以首尾配对 x与2
p-1-x配对 一个数只保留最低位1 剩余的给另一个
可以得到 1 和 2**p-2 两个值相乘
最后乘积为(2p-1)*(2p-2)(2(p-1)-1)

def minNonZeroProduct(p):""":type p: int:rtype: int"""MOD=10**9+7if p==1:return 1def power(x,n):x_init = xb = []while n>0:r = n%2b.insert(0,r)n = n//2for i in range(1,len(b)):x = x*x%MODif b[i]==1:x = x*x_init%MODreturn xbase = 2**pnum = base//2-1x = (base-2)%MODans = 1ans = power(x,num)%MODans = (ans*((base-1)%MOD))%MODreturn ans

3/21 2671. 频率跟踪器

hash表记录次数
num[i]记录数字i出现的次数
cnt[q]记录频率为q的数字个数

class FrequencyTracker(object):def __init__(self):self.num = {}self.cnt = {}def add(self, number):""":type number: int:rtype: None"""self.cnt[self.num.get(number,0)] = self.cnt.get(self.num.get(number,0),0)-1self.num[number] = self.num.get(number,0)+1self.cnt[self.num.get(number,0)] = self.cnt.get(self.num.get(number,0),0)+1def deleteOne(self, number):""":type number: int:rtype: None"""if self.num.get(number,0)==0:returnself.cnt[self.num.get(number,0)]= self.cnt.get(self.num.get(number,0),0)-1self.num[number]  = self.num.get(number,0)-1self.cnt[self.num.get(number,0)]= self.cnt.get(self.num.get(number,0),0)+1def hasFrequency(self, frequency):""":type frequency: int:rtype: bool"""return self.cnt.get(frequency,0)>0

3/22 2617. 网格图中最少访问的格子数

对于grid[i][j] 已知到这个位置最少需要f步
向右走 最远到达该行的grid[i][j]+j
向下走 最远到达该列的grid[i][j]+i
在这一行 维持一个最小堆 保存rowh=(f,grid[i][j]+j) 表示上一步走了f的最远可以到达位置
列同理colh
接下来考虑 如何得到grid[i][j]最少需要f
分别处理rowh,colh
对于堆顶最小f 它的距离如果到不了当前的位置i/j 则将其弹出
最后可以得到行、列分别能够到达当前位置的两个最小f 即rowh[0][0],colh[0][0]
对于当前的最小步数f = min(rowh[0][0],colh[0][0])+1

def minimumVisitedCells(grid):""":type grid: List[List[int]]:rtype: int"""import heapqm,n=len(grid),len(grid[0])if m==1 and n==1:return 1colhs = [[] for _ in range(m)]for i,row in enumerate(grid):rowh=[]for j,(g,colh) in enumerate(zip(row,colhs)):while rowh and rowh[0][1]<j:heapq.heappop(rowh)while colh and colh[0][1]<i:heapq.heappop(colh)f = float("inf") if i or j else 1if rowh:f = rowh[0][0]+1if colh:f = min(f,colh[0][0]+1)if g and f<float("inf"):heapq.heappush(rowh,(f,g+j))heapq.heappush(colh,(f,g+i))return f if f<float("inf") else -1

3/23 2549. 统计桌面上的不同数字

n<=100
最差的情况 对于已有数字x 下一天x-1必定会出现在桌面上
x,x-1,x-2…,2
所以在10^9内 如果n>1则2~n都会出现在桌面上
如果n=1 则只有1

def distinctIntegers(n):""":type n: int:rtype: int"""return 1 if n==1 else n-1

3/24 322. 零钱兑换

dp[i]表示凑成金额i需要的最少硬币数
将硬币从小到大排序
依次考虑面值i 是否存在面值i-coin

def coinChange(coins, amount):""":type coins: List[int]:type amount: int:rtype: int"""coins.sort()dp = [float("inf")]*(amount+1)dp[0]=0for i in range(coins[0],amount+1):tmp=float("inf")for j in coins:if j<=i:tmp = min(tmp,dp[i-j])else:breakif tmp<float("inf"):dp[i]=tmp+1return -1 if dp[amount]==float("inf") else dp[amount]

相关文章:

LeetCode 每日一题 2024/3/18-2024/3/24

记录了初步解题思路 以及本地实现代码&#xff1b;并不一定为最优 也希望大家能一起探讨 一起进步 目录 3/18 303. 区域和检索 - 数组不可变3/19 1793. 好子数组的最大分数3/20 1969. 数组元素的最小非零乘积3/21 2671. 频率跟踪器3/22 2617. 网格图中最少访问的格子数3/23 254…...

Unity 鼠标拖拽3D物体跟随移动的方法

之前我们研究过UI拖拽跟随鼠标移动的方法&#xff1a;https://blog.csdn.net/mr_five55/article/details/135562325 但是该方法不适合3D场景。 假如我们要通过鼠标拖拽3D物体移动&#xff0c;那么可以使用以下控制方法&#xff1a; using System.Collections; using System.…...

数据分析-Pandas分类数据的类别排序和顺序

数据分析-Pandas类别的排序和顺序 数据分析和处理中&#xff0c;难免会遇到各种数据&#xff0c;那么数据呈现怎样的规律呢&#xff1f;不管金融数据&#xff0c;风控数据&#xff0c;营销数据等等&#xff0c;莫不如此。如何通过图示展示数据的规律&#xff1f; 数据表&…...

利用 Claude 3 on Amazon Bedrock 和 Streamlit 的“终极组合”,开发智能对话体验

概述 通过本文&#xff0c;您将学会如何利用 Streamlit 框架快速搭建前端交互界面。该界面将集成图像上传功能&#xff0c;让用户可以方便地提交待处理图片。在后端&#xff0c;我们将借助 Amazon Bedrock 的 Message API&#xff0c;调用 Claude 3 家族中的 Sonnet 模型对图像…...

Golang基础 Label标签与goto跳转

使用方法 Label 和goto是必须的 Label可以声明再函数体的任何地方 Label的作用范围是在函数体中 Label在嵌套函数(闭包)是不可用的. 不管是在闭包里调用闭包外的Label, 还是在闭包外调用闭包里的Label 变量的声明必须在goto之前 示例 package mainimport "fmt"…...

二进制王国(蓝桥杯备赛)【sort/cmp的灵活应用】

二进制王国 题目链接 https://www.lanqiao.cn/problems/17035/learning/?contest_id177 题目描述 思路 这里就要灵活理解字典序排列&#xff0c;虽然string内置可以直接比较字符串字典序&#xff0c;但是在拼接时比较特殊&#xff0c;比如 11的字典序小于110&#xff0c;但…...

活用C语言之宏定义应用大全

零、C语言宏定义知多少 C语言的编程过程中经常会用到宏定义&#xff0c;然而如果你只是使用宏定义做一些常量的定义&#xff0c;那么你不是OUT了就是C语言小白。 那么我们在编程过程中&#xff0c;宏定义都有哪些作用呢? 常量定义 可以作为功能代码的开关 防止头文件被重复…...

【源码】I.MX6ULL移植OpenCV

编译完成的源码&#xff1a; git clone https://gitee.com/wangyoujie11/atkboard_-linux_-driver.git 1.下载源码放在自己的opecv源码目录下 2.QTOpenCV工程代码放置的位置 3.更改.pro工程文件的opencv地址 4.使用命令行编译 前提是自己环境中已经配置好arm-qt的交叉编译…...

pytorch深度学习——dataset(附数据集下载)

在学习深度学习的时候&#xff0c;我们需要考虑如何去处理数据去训练我们的模型&#xff0c;pytorch为我们提供了Dataset和DataLoader两个类来对数据进行处理&#xff0c;前者作用是提供了一种方式来获取数据及其label&#xff0c;后者的作用是为网络提供不同的数据形式。本文主…...

springboot+vue考试管理系统

基于springboot和vue的考试管理系统 001 springboot vue前后端分离项目 本文设计了一个基于Springbootvue的前后端分离的在线考试管理系统&#xff0c;采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&…...

自动驾驶建图--道路边缘生成方案探讨

自动驾驶建图–道路边缘生成方案探讨 一、背景 对于自动驾驶来说&#xff0c;建图是必不可少的&#xff0c;目前主流厂商技术都在从HD到"无图"进行过渡筹备中&#xff0c;不过想要最终实现真正的"无图"还是有很长的一段路要走。 对于建图来说&#xff0c;…...

图片编辑器中实现文件上传的三种方式和二进制流及文件头校验文件类型

背景 最近在 vue-design-editor 开源项目中实现 psd 等多种文件格式上传解析成模板过程中, 发现搞定设计文件上传没有使用 input 实现文件上传, 所以我研究了一下相关技术, 总结了以下三种文件上传方法 input 文件选择window.showOpenFilePicker 和 window.showDirectoryPicke…...

深度学习,CRNN+CTC和Attention OCR你更青睐哪一种?

深度学习在OCR领域的应用已经取得了瞩目的成果&#xff0c;而选择合适的算法对于提升OCR的识别准确率至关重要。在众多算法中&#xff0c;CRNN和Attention OCR犹如两颗璀璨的明珠&#xff0c;备受瞩目。 CRNN&#xff0c;这位结合了卷积神经网络&#xff08;CNN&#xff09;和…...

飞桨AI应用@riscv OpenKylin

在riscv编译安装飞桨PaddlePaddle参见&#xff1a; 算能RISC-V通用云编译飞桨paddlepaddleopenKylin留档_在riscv下进行paddlelite源码编译-CSDN博客 安装好飞桨&#xff0c;就可以用飞桨进行推理了。刚开始计划用ONNX推理&#xff0c;但是在算能云没有装上&#xff0c;所以最…...

在MongoDB建模1对N关系的基本方法

“我在 SQL 和规范化数据库方面拥有丰富的经验&#xff0c;但我只是 MongoDB 的初学者。如何建立一对 N 关系模型&#xff1f;” 这是我从参加 MongoDB 分享日活动的用户那里得到的最常见问题之一。 我对这个问题没有简短的答案&#xff0c;因为方法不只有一种&#xff0c;还有…...

C++基础之运算符重载(十一)

首先为什么要对运算符进行重载&#xff1f;因为C内置的运算符只能作用于一些基本数据类型&#xff0c;而对类和结构体这种自定义数据类型是不管用的。所以这时我们需要对运算符进行重新定义满足一定的运算规则。 运算符重载的三种形式 1.以普通的函数进行重载 #include <…...

初始Java篇(JavaSE基础语法)(2)(逻辑控制)

个人主页&#xff08;找往期文章包括但不限于本期文章中不懂的知识点&#xff09;&#xff1a;我要学编程(ಥ_ಥ)-CSDN博客 目录 逻辑控制 顺序结构 分支结构 if语句 switch 语句 循环结构 while 循环 for 循环 do while 循环 输入输出 输出到控制台 从键盘输入 …...

家用路由器和企业路由器的区别?

一、家用路由器 家用路由器路由器交换机 它只有一个WAN口和一个LAN口&#xff0c;WAN口接公网一个地址&#xff0c;LAN口接你电脑一个IP地址&#xff0c;完全符合路由器的设计&#xff0c;而因为家里如果用了&#xff0c;说明要接多个电脑&#xff0c;那么如果还需要对每个接口…...

Gin简介(Go web基础知识)

Gin简介 https://geektutu.com/post/quick-go-gin.html我是从这个网站上面摘录的&#xff0c;就是做个笔记&#xff0c;仅分享。膜拜极客兔兔大佬 Go特性&#xff1a; 快速&#xff1a;路由不使用反射&#xff0c;基于Radix树&#xff0c;内存占用少。 中间件&#xff1a;HT…...

HBase的Bulk Load流程

目录 1. 数据准备 2. 文件移动 3. 加载数据 4. Region处理 5. 元数据更新 6. 完成加载 7. 清理 8. 异常处理 LoadIncrementalHFiles&#xff08;也称为Bulk Load&#xff09;是HBase中一种将大量数据高效导入到HBase表的机制。以下是LoadIncrementalHFiles的主要流程步…...

TDengine 快速体验(Docker 镜像方式)

简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能&#xff0c;本节首先介绍如何通过 Docker 快速体验 TDengine&#xff0c;然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker&#xff0c;请使用 安装包的方式快…...

java 实现excel文件转pdf | 无水印 | 无限制

文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...

线程与协程

1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指&#xff1a;像函数调用/返回一样轻量地完成任务切换。 举例说明&#xff1a; 当你在程序中写一个函数调用&#xff1a; funcA() 然后 funcA 执行完后返回&…...

ffmpeg(四):滤镜命令

FFmpeg 的滤镜命令是用于音视频处理中的强大工具&#xff0c;可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下&#xff1a; ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜&#xff1a; ffmpeg…...

unix/linux,sudo,其发展历程详细时间线、由来、历史背景

sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列&#xff0c;以便知晓哪些列包含有价值的数据&#xff0c;…...

动态 Web 开发技术入门篇

一、HTTP 协议核心 1.1 HTTP 基础 协议全称 &#xff1a;HyperText Transfer Protocol&#xff08;超文本传输协议&#xff09; 默认端口 &#xff1a;HTTP 使用 80 端口&#xff0c;HTTPS 使用 443 端口。 请求方法 &#xff1a; GET &#xff1a;用于获取资源&#xff0c;…...

CRMEB 中 PHP 短信扩展开发:涵盖一号通、阿里云、腾讯云、创蓝

目前已有一号通短信、阿里云短信、腾讯云短信扩展 扩展入口文件 文件目录 crmeb\services\sms\Sms.php 默认驱动类型为&#xff1a;一号通 namespace crmeb\services\sms;use crmeb\basic\BaseManager; use crmeb\services\AccessTokenServeService; use crmeb\services\sms\…...

C# 表达式和运算符(求值顺序)

求值顺序 表达式可以由许多嵌套的子表达式构成。子表达式的求值顺序可以使表达式的最终值发生 变化。 例如&#xff0c;已知表达式3*52&#xff0c;依照子表达式的求值顺序&#xff0c;有两种可能的结果&#xff0c;如图9-3所示。 如果乘法先执行&#xff0c;结果是17。如果5…...

uniapp 小程序 学习(一)

利用Hbuilder 创建项目 运行到内置浏览器看效果 下载微信小程序 安装到Hbuilder 下载地址 &#xff1a;开发者工具默认安装 设置服务端口号 在Hbuilder中设置微信小程序 配置 找到运行设置&#xff0c;将微信开发者工具放入到Hbuilder中&#xff0c; 打开后出现 如下 bug 解…...