每天刷两道题——第七天+第八天

力扣官网

1.1移动零

给定一个数组 n u m s nums nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序,在不复制数组的情况下原地对数组进行操作。

输入: nums = [0,1,0,3,12]
输出: [1,3,12,0,0]

代码

 def moveZeroea(self,nums):if not nums:return 0j=0# 将所有非零的元素依次提前,最后将剩下的全修改为0for i in range(len(nums)):if nums[i]!=0:nums[j]=nums[i]j+=1for i in range(j,len(nums)):nums[i]=0return nums

1.2盛最多水的容器

给定一个长度为 n n n的整数数组 h e i g h t height height 。有 n n n 条垂线,第 i i i 条线的两个端点是 ( i , 0 ) (i, 0) (i,0) ( i , h e i g h t [ i ] ) (i, height[i]) (i,height[i]) 。找出其中的两条线,使得它们与 x x x 轴共同构成的容器可以容纳最多的水。返回容器可以储存的最大水量。说明:你不能倾斜容器。
在这里插入图片描述
输入:[1,8,6,2,5,4,8,3,7]
输出:49

设两指针 i , j ( j > i ) i,j(j>i) i,j(j>i)指向的水槽板高度分别为 h [ i ] , h [ j ] h[i],h[j] h[i],h[j] ,此状态下水槽面积为 S(i,j) 。由于可容纳水面积如下 :
S ( i , j ) = m i n ( h [ i ] , h [ j ] ) × ( j − i ) S(i,j)=min(h[i],h[j])×(j−i) S(i,j)=min(h[i],h[j])×(ji)

在每个状态下,无论长板或短板向中间收窄一格,都会导致水槽 底边宽度−1
1.若向内 移动短板 ,水槽的短板 m i n ( h [ i ] , h [ j ] ) min(h[i],h[j]) min(h[i],h[j]) 可能变大,因此下个水槽的面积 可能增大 。
2.若向内 移动长板 ,水槽的短板 m i n ( h [ i ] , h [ j ] ) min(h[i],h[j]) min(h[i],h[j])​ 不变或变小,因此下个水槽的面积 一定变小 。
因此,初始化双指针分列水槽左右两端,循环每轮将短板向内移动一格,并更新面积最大值,直到两指针相遇时跳出;即可获得最大面积。

代码

 def maxArea(self,height):i,j,ares=0,len(height)-1,0while i<j:if height[i]<height[j]:ares=max(ares,height[i]*(j-i))i+=1else:ares=max(ares,height[i]*(j-i))j-=1return ares

1.3三数之和

给你一个整数数组 n u m s nums nums ,你返回所有和为 0不重复三元组 [ n u m s [ i ] , n u m s [ j ] , n u m s [ k ] ] [nums[i], nums[j], nums[k]] [nums[i],nums[j],nums[k]] 满足 i ! = j 、 i ! = k 且 j ! = k i != j、i != k 且 j != k i!=ji!=kj!=k ,同时还满足 n u m s [ i ] + n u m s [ j ] + n u m s [ k ] = = 0 nums[i] + nums[j] + nums[k] == 0 nums[i]+nums[j]+nums[k]==0

输入:nums = [-1,0,1,2,-1,-4]
输出:[[-1,-1,2],[-1,0,1]]
解释
nums[0] + nums[1] + nums[2] = (-1) + 0 + 1 = 0 。
nums[1] + nums[2] + nums[4] = 0 + 1 + (-1) = 0 。(和1重复了)
nums[0] + nums[3] + nums[4] = (-1) + 2 + (-1) = 0 。
不同的三元组是 [-1,0,1] 和 [-1,-1,2] 。

在这里插入图片描述

 def treeSum(self,nums):res=[]n=len(nums)if (not nums or n<3): #数组为空或者长度小于3return []nums.sort()  #=升序排序 ,nums.sort(reverse=True)=降序排序for i in range(n):if nums[i]>0:#如果第一个元素超过零了,后面找不出两个和他相加等于零的数了return resif i>0 and nums[i]==nums[i-1]:continuel=i+1r=n-1while l<r:if nums[i]+nums[l]+nums[r]==0:res.append([nums[i],nums[l],nums[r]])while l<r and nums[l]==nums[l+1]:l=l+1while l<r and nums[r]==nums[r-1]:r=r-1l=l+1r=r-1elif nums[i]+nums[l]+nums[r]>0:r=r-1else:l=l+1return res

1.4接雨水

给定 n n n 个非负整数表示每个宽度为 1 1 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。
在这里插入图片描述

类似于括号匹配,仔细观察蓝色的部分,每次匹配出一对括号(找到对应的一堵墙),就计算这两堵墙中的水。
在这里插入图片描述
用栈保存每堵墙。当遍历墙的高度的时候,如果当前高度小于栈顶的墙高度,说明这里会有积水,我们将墙的高度的下标入栈。如果当前高度大于栈顶的墙的高度,说明之前的积水到这里停下,我们可以计算下有多少积水了。计算完,就把当前的墙继续入栈,作为新的积水的墙。

步骤为:
1.当前高度小于等于栈顶高度,入栈,指针后移。
2.当前高度大于栈顶高度,出栈,计算出当前墙和栈顶的墙之间水的多少,然后计算当前的高度和新栈的高度的关系,重复第 2 步,直到当前墙的高度不大于栈顶高度或者栈空,然后把当前墙入栈,指针后移。

代码:

class stack:def __init__(self,size):self.max=size  #栈的容量self.elem=[None]*self.maxself.top=0  #栈顶self.base=0  #栈尾def push(self,num):if self.top-self.base==self.max:print("the stack is full")self.elem[self.top]=numself.top+=1def pop(self):if self.top==self.base:print("the stack is empty")self.top-=1e=self.elem[self.top]return edef get_pop(self):return self.elem[self.top-1]def isEmpty(self):if self.top==self.base:return Trueelse:return Falseclass question:def trap(self,height):sum=0hstack=stack(len(height))i=0while i<len(height):#如果栈不为空,并且指向高度大于栈顶的高度就一直循环while not hstack.isEmpty() and height[i]>height[hstack.get_pop()]:h=height[hstack.get_pop()] #栈顶元素hstack.pop()if hstack.isEmpty():breakdistance=i-hstack.get_pop()-1  #两墙之间的距离dmin=min(height[hstack.get_pop()],height[i])sum=sum+distance*(dmin-h)  #距离乘以当前元素和栈顶元素的差值hstack.push(i) #当前指针入栈i+=1  #指针后移return sum

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

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

相关文章

强化学习的数学原理学习笔记 - 蒙特卡洛方法(Monte Carlo)

文章目录 概览&#xff1a;RL方法分类蒙特卡洛方法&#xff08;Monte Carlo&#xff0c;MC&#xff09;MC BasicMC Exploring Starts&#x1f7e6;MC ε-Greedy 本系列文章介绍强化学习基础知识与经典算法原理&#xff0c;大部分内容来自西湖大学赵世钰老师的强化学习的数学原理…

Matytype的安装问题(word及PPT报错问题)

特别针对&#xff1a;mathtype安装了多次&#xff0c;又卸载了多次的用户。 Word报弹错错误&#xff1a;参考 mathtype安装后&#xff0c;打开word出现没找到dll的错误&#xff0c;这个问题较好解决。 如何解决MathType兼容Office 2016-MathType中文网 PPT&#xff08;PowerPoi…

线程实现方式Callable_获取线程的返回结果

线程实现方式Callable_获取线程的返回结果 1、实现一个Callable接口 import java.util.concurrent.Callable;public class MyCallable implements Callable<Integer> {Overridepublic Integer call() throws Exception {int num 0;for (int i 1; i < 100; i) {num …

uViw Dialog 对话框

在保留当前页面状态的情况下&#xff0c;告知用户并承载相关操作。 TIP 在 SSR 场景下&#xff0c;您需要将组件包裹在 <client-only></client-only> 之中 (如: Nuxt) 和 SSG (e.g: VitePress). 基础用法# Dialog 弹出一个对话框&#xff0c;适合需要定制性更大…

Opencv与PyQt5设计一个摄像头界面

一、前言 本篇的内容是学习的这一位博主的&#xff1a;程序界面设计_Doc_Cheng的博客-CSDN博客。 这是我见过很详细的教你如何使用的PyQt5来完成UI界面设计的&#xff0c;专注于UI界面设计。对我而言&#xff0c;这教程就像是一个实用工具&#xff0c;因为我只需要能够显示图…

nodejs01

nodejs作用 Node.js 是一个免费的、开源的、跨平台的 JavaScript 运行时环境&#xff0c;允许开发人员在浏览器之外编写命令行工具和服务器端脚本. 是javascript的一个运行环境&#xff0c;&#xff0c;&#xff0c; nodejs stream 是前端工程化的基础 nodejs可以作为中间层&…

SpringMVC-@RequestMapping注解

0. 多个方法对应同一个请求 RequestMapping("/")public String toIndex(){return "index";}RequestMapping("/")public String toIndex2(){return "index";}这种情况是不允许的&#xff0c;会报错。 1. 注解的功能 RequestMapping注…

《程序员的自我修养--链接,装载与库》

第一章&#xff1a;温故而知新 过度优化的问题&#xff1a; 我们知道volatile关键字可以阻止过度优化&#xff0c;因为它可以完成两件事&#xff1a; 阻止编译器为了提高速度将一个变量缓存到寄存器而不写回阻止编译器调整操作volatile变量的指令顺序 然而&#xff0c;在优…

如何使用csdn中的c知道进行学习?

1.c知道 猜测是通过chatgpt训练链接到CSDN内部的文章内容等&#xff0c;进行生成的一款应用。 2.如何使用呢 打比方说&#xff0c;我想学习下多目标跟踪中的ukf&#xff0c;那么就可以输入这个关键字。 那既然是学习&#xff0c;就要进一步深究&#xff0c;有三种方式&#…

uniapp向上拉加载,下拉刷新

目录 大佬1大佬2 大佬1 大佬地址&#xff1a;https://blog.csdn.net/wendy_qx/article/details/135077822 大佬2 大佬2&#xff1a;https://blog.csdn.net/chen__hui/article/details/122497140

<软考高项备考>《论文专题 - 51 进度管理(2) 》

3 过程2-定义活动 3.1 问题 4W1H过程做什么识别和记录为完成项目可交付成果而须采取的具体行动的过程作用&#xff1a;将工作包分解为进度活动&#xff0c;作为对项目工作进行进度估算、规划、执行、监督和控制的基础为什么做对活动才能更详细更准确的分配资源、时间、成本谁…

C#,数值计算,求平方根之巴比伦算法(Babylonian algorithm)的源代码

平方根的巴比伦算法。 1 巴比伦算法介绍一 巴比伦算法可能算是最早的用于计算$sqrt{S}$的算法之一&#xff0c;因为其可以用牛顿法导出&#xff0c;因此在很多地方也被成为牛顿法。其核心思想在于为了计算x的平方根&#xff0c;可以从某个任意的猜测值g开始计算。在真实的运算…

屏幕截图--Snagit

Snagit是一款优秀的屏幕、文本和视频捕获、编辑与转换软件。它不仅可以捕获静止的图像&#xff0c;还能获得动态的图像和声音。软件界面干净清爽&#xff0c;功能板块一目了然&#xff0c;为用户提供专业的屏幕录制方案。可以根据自己的需求调整录制视频的分辨率、帧数、输出格…

探索Flutter中常用的系统组件

Flutter 是一款强大的开源移动应用框架&#xff0c;其丰富的系统组件使得开发者可以轻松构建漂亮且高性能的移动应用。在本文中&#xff0c;我们将深入探讨一些常用的 Flutter 系统组件&#xff0c;帮助开发者更好地理解和应用它们。 1. Scaffold&#xff08;脚手架&#xff0…

Linux命令入门及ls命令

由于大家第一次接触到Linux命令&#xff0c;故此篇会详细讲述什么是命令&#xff0c;什么又是命令行&#xff1f;Linux命令的基础结构&#xff0c;什么是工作目录&#xff0c;什么又是HOME目录&#xff1f;并且带大家熟悉ls命令的基础使用。 1.命令和命令行 命令行&#xff1a…

使用spring cloud gateway作为服务网关

Spring Cloud Gateway是Spring Cloud官方推出的第二代网关框架&#xff0c;取代Zuul网关。网关作为流量的&#xff0c;在微服务系统中有着非常作用&#xff0c;网关常见的功能有路由转发、权限校验、限流控制等作用。 gateway需要注册到nacos中去&#xff0c;需要引入以下的依…

【PgSQL】聚合函数string_agg

在工作中&#xff0c;遇到了这样的需求&#xff0c;需要根据某一个字段A分组查询&#xff0c;统计数量&#xff0c;同时还要查询另一个字段B&#xff0c;但是呢这个字段B在分组后的记录中存在不同的值。最开始不知道有聚合函数可以实现这一功能&#xff0c;在代码中进行了处理。…

[嵌入式C][入门篇] 快速掌握基础3 (运算符)

开发环境&#xff1a; 网页版&#xff1a;跳转本地开发(Vscode)&#xff1a;跳转 文章目录 一、 简介二、算术运算符&#xff08;1&#xff09;示例代码&#xff1a;&#xff08;2&#xff09;和--的先后顺序&#xff08;直接看效果&#xff09; 三、逻辑运算符(1)示例代码 四…

网络对讲终端 网络音频终端 网络广播终端SV-7011V使用说明

高速路sip广播对讲求助 隧道sip对讲调度SIP-7011 网络广播终端SV-7011 壁挂式对讲终端网络监听终端SIP广播终端 sip语音对讲终端SIP-7011 SV-7011网络对讲终端网络对讲、网络厂播、监听 SV-7101网络解码终端提供一路线路输出接功放或有源音箱。 SV-7102网络解码广播终端两…

HNU-数据库系统-讨论课2

第二次小班讨论课安排如下: 主题: 数据库系统设计与应用开发。 目的&#xff1a;让学生通过练习和讨论充分掌握数据库系统的设计与应用开发。 内容: 设计和实现一个数据库及应用系统。设计内容包括系统分析、系统设计、 数据库设计&#xff08;需求分析、概念结构设计、逻辑…