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

LeetCode 每日一题 2024/7/8-2024/7/14

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


目录

      • 7/8 724. 寻找数组的中心下标
      • 7/9 3102. 最小化曼哈顿距离
      • 7/10 2970. 统计移除递增子数组的数目 I
      • 7/11 2972. 统计移除递增子数组的数目 II
      • 7/12 2974. 最小数字游戏
      • 7/13 3011. 判断一个数组是否可以变为有序
      • 7/14 807. 保持城市天际线


7/8 724. 寻找数组的中心下标

从左到右依次判断

def pivotIndex(nums):""":type nums: List[int]:rtype: int"""s=sum(nums)l,r=0,sfor i,num in enumerate(nums):r-=numif l==r:return il+=numreturn -1

7/9 3102. 最小化曼哈顿距离

找到当前最大距离
判断移除该距离两个点中一个后的距离变换

def minimumDistance(points):""":type points: List[List[int]]:rtype: int"""def check(arr,i):n=len(arr)if arr[0][1]==i:return arr[n-1][0]-arr[1][0]elif arr[-1][1]==i:return arr[n-2][0]-arr[0][0]else:return arr[-1][0]-arr[0][0]sx=[(x-y,i) for i,(x,y) in enumerate(points)]sy=[(x+y,i) for i,(x,y) in enumerate(points)]sx.sort()sy.sort()v1 = sx[-1][0]-sx[0][0]v2 = sy[-1][0]-sy[0][0]ans = float("inf")if v1>=v2:i,j = sx[0][1],sx[-1][1]ans = min(ans,max(check(sx,i),check(sy,i)))ans = min(ans,max(check(sx,j),check(sy,j)))else:i,j = sy[0][1],sy[-1][1]ans = min(ans,max(check(sx,i),check(sy,i)))ans = min(ans,max(check(sx,j),check(sy,j)))return ans

7/10 2970. 统计移除递增子数组的数目 I

找到数组最长严格递增的位置i 即前缀nums[0]~nums[i]严格递增
如果i是数组最后的位置 那么所有子数组都可以移除即 n*(n+1)/2
否则 只保留前缀的一部分nums[0]~nums[i] 可以有i+2种
如果是前缀加后缀 设后缀第一个数为nums[j] 移除最后一个数是nums[j-1]
从后往前枚举j 直到nums[j]>=nums[j+1]
保持nums[i]<nums[j]

def incremovableSubarrayCount(nums):""":type nums: List[int]:rtype: int"""n=len(nums)i = 0while i<n-1 and nums[i]<nums[i+1]:i+=1if i==n-1:return n*(n+1)//2ans = i+2j=n-1while j==n-1 or nums[j]<nums[j+1]:while i>=0 and nums[i]>=nums[j]:i-=1ans += i+2j-=1return ans

7/11 2972. 统计移除递增子数组的数目 II

与昨天的一样
找到数组最长严格递增的位置i 即前缀nums[0]~nums[i]严格递增
如果i是数组最后的位置 那么所有子数组都可以移除即 n*(n+1)/2
否则 只保留前缀的一部分nums[0]~nums[i] 可以有i+2种
如果是前缀加后缀 设后缀第一个数为nums[j] 移除最后一个数是nums[j-1]
从后往前枚举j 直到nums[j]>=nums[j+1]
保持nums[i]<nums[j]

def incremovableSubarrayCount(nums):""":type nums: List[int]:rtype: int"""n=len(nums)i = 0while i<n-1 and nums[i]<nums[i+1]:i+=1if i==n-1:return n*(n+1)//2ans = i+2j=n-1while j==n-1 or nums[j]<nums[j+1]:while i>=0 and nums[i]>=nums[j]:i-=1ans += i+2j-=1return ans

7/12 2974. 最小数字游戏

依照规则 从小到大排序 奇数偶数位的数值调换

def numberGame(nums):""":type nums: List[int]:rtype: List[int]"""nums.sort()i = 0while i<len(nums):nums[i],nums[i+1]=nums[i+1],nums[i]i+=2return nums

7/13 3011. 判断一个数组是否可以变为有序

二进制1的个数相同的连续数值可以分为一组
每一组内必定可以实现有序
从头遍历 为了实现全部数组有序
排在后面小组的所有数值 必定需要大于前面小组的最大值
pmx记录前面小组的最大值 mx记录当前小组最大值

def canSortArray(nums):""":type nums: List[int]:rtype: bool"""n=len(nums)pmx = 0i = 0while i<n:mx = 0cnt = nums[i].bit_count()while i<n and nums[i].bit_counb()==cnt:x = nums[i]if x<pmx:return Falsemx=max(mx,x)i+=1pmx=mxreturn True

7/14 807. 保持城市天际线

找出每一行 每一列的最大高度
对于位置i,j 最大高度为min(第i行的max,第j列的max)

def maxIncreaseKeepingSkyline(grid):""":type grid: List[List[int]]:rtype: int"""n,m = len(grid),len(grid[0])col,row = [0]*m,[0]*nfor i in range(n):for j in range(m):row[i] = max(row[i],grid[i][j])col[j] = max(col[j],grid[i][j])ans = 0for i in range(n):for j in range(m):new =  min(row[i],col[j])ans += new-grid[i][j]return ans

相关文章:

  • Spring-Spring、IoC、DI、注解开发
  • Qt学生管理系统-- 数据库课程设计(付源码)
  • Anything in Any Scene:无缝融入任何场景,实现逼真视频对象插入技术
  • linux彻底卸载docker
  • Qt 实战(2)搭建开发环境 | 2.3、qmake详解
  • Java中线程启动:start()与run()方法的区别
  • 2024-07-12 Unity AI状态机1 —— 框架介绍
  • 案例|LabVIEW连接S7-1200PLC
  • pytorch说明
  • Java 实验三:数组操作以及Java中的方法
  • 解决方案架构师系列 - AWS - AWS Amplify 服务功能介绍
  • 【Linux取经之路】Linux常见指令
  • 关于windows下编译xLua插件的流程记录
  • 【Parallel SSH】Ubuntu系统配置pssh实现多主机并行执行Master分发的命令
  • 突破与创新:Vue.js 创始人 尤雨溪 2024 年度技术前瞻
  • JavaScript 如何正确处理 Unicode 编码问题!
  • 0基础学习移动端适配
  • C++11: atomic 头文件
  • egg(89)--egg之redis的发布和订阅
  • es6要点
  • hadoop入门学习教程--DKHadoop完整安装步骤
  • Java|序列化异常StreamCorruptedException的解决方法
  • JS学习笔记——闭包
  • JS字符串转数字方法总结
  • Meteor的表单提交:Form
  • Mysql5.6主从复制
  • vue-cli在webpack的配置文件探究
  • windows下使用nginx调试简介
  • Yii源码解读-服务定位器(Service Locator)
  • 大数据与云计算学习:数据分析(二)
  • 开发了一款写作软件(OSX,Windows),附带Electron开发指南
  • 可能是历史上最全的CC0版权可以免费商用的图片网站
  • 前端工程化(Gulp、Webpack)-webpack
  • 设计模式走一遍---观察者模式
  • 使用前端开发工具包WijmoJS - 创建自定义DropDownTree控件(包含源代码)
  • 视频flv转mp4最快的几种方法(就是不用格式工厂)
  • 腾讯优测优分享 | 你是否体验过Android手机插入耳机后仍外放的尴尬?
  • 终端用户监控:真实用户监控还是模拟监控?
  • ​Kaggle X光肺炎检测比赛第二名方案解析 | CVPR 2020 Workshop
  • # 透过事物看本质的能力怎么培养?
  • $.each()与$(selector).each()
  • ( 10 )MySQL中的外键
  • (02)Unity使用在线AI大模型(调用Python)
  • (6)添加vue-cookie
  • (BFS)hdoj2377-Bus Pass
  • (C语言)求出1,2,5三个数不同个数组合为100的组合个数
  • (day 12)JavaScript学习笔记(数组3)
  • (delphi11最新学习资料) Object Pascal 学习笔记---第13章第6节 (嵌套的Finally代码块)
  • (ZT) 理解系统底层的概念是多么重要(by趋势科技邹飞)
  • (阿里巴巴 dubbo,有数据库,可执行 )dubbo zookeeper spring demo
  • (第9篇)大数据的的超级应用——数据挖掘-推荐系统
  • (二)c52学习之旅-简单了解单片机
  • (二)丶RabbitMQ的六大核心
  • (每日持续更新)jdk api之FileReader基础、应用、实战
  • (强烈推荐)移动端音视频从零到上手(下)