Leetcode Hot 100之四:283. 移动零+11. 盛最多水的容器

news2024/11/26 19:40:32

283.移动零

题目:

给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。

请注意 ,必须在不复制数组的情况下原地对数组进行操作。

示例 1:

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

输入: nums = [0]
输出: [0]

思路:

使用双指针i和j。第一遍遍历i从左到右遍历数组,遇到非零元素即赋值给j所在的位置。因为j的数量一方面等于非零元素的个数,另一方面等于最终形态数组的左边最后一个非零元素的下标-1。(相当于一个数组长度是4,最后一个元素的下标就是4-1,为3)
第二遍再从j下标开始遍历,一直到数组结尾,都赋值为0,即相当于从最终形态数组的左边最后一个非零元素的下一个,即零元素一直到数组结尾,都赋值为0.

java代码:

class Solution {
    public void moveZeroes(int[] nums) {
       int len=nums.length;
       if(nums == null||len==0) return;
        int j=0;
        for(int i=0;i<len;i++){
            if(nums[i]!=0){
                nums[j++]=nums[i];
            }
        }
        for(int i=j;i<len;i++)nums[i]=0;
    }
}

效率:

时间上为1ms,击败了99%的用户。不用再优化了。

11.盛最多水的容器

题目

给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。

找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。

说明:你不能倾斜容器。
在这里插入图片描述
n == height.length
2 <= n <= 10^5
0 <= height[i] <= 10^4

思路

暴力做法:从左到右遍历,每次都固定左边界,然后再从左边界开始遍历右边界。这样可以涵盖所有面积的情况。但是因为是双重循环,所以时间复杂度为O(N)。

双指针做法:针对这种两边边界都会移动的情况下,我们优化时首先需要考虑的就是双指针。暴力循环的做法,每次固定左边界,右边界移动,会让底和高同时变化。这样就让我们无法提前判断是否某些情况是无需遍历的,可以被优化的。基于此,我们要思考的就是如何移动,能只有一个因素影响面积。
我们发现,如果不是固定左边界,然后右边界从左边界处从左到右遍历。而是左右边界都各自放在坐标的左右边界,这样就确保了移动的过程中底是越来越小的,只有高变化时才有可能出现面积更大的可能。那么就只有一个因素影响面积。
接下来我们需要判断什么时候移动左边界,什么时候移动右边界。同理,我们只需要移动高度较小的那边。因为高度较小的那边限制了面积,只有移动他才有可能出现面积更大的情况。
这个题力扣官方讲解的很好,建议还是不明白的话去看下官方讲解视频。

java代码

class Solution {
    public int maxArea(int[] height) {
        int len=height.length;
        int ans=0;
        int i=0;
        int j=len-1;
        while(j>i){
            int mmin=Math.min(height[i], height[j])*(j-i);
            ans=Math.max(ans, mmin);
            //考虑移动左指针还是右指针
            //如果左指针的高度比右指针小,那么此时移动左指针才有可能找到面积更大的区域
            if(height[i]<height[j]){
                //移动左指针
                i++;
            }else j--;
        }
         return ans;
    }
}

效率

4ms,击败 61.80%使用 Java 的用户,还行,没啥需要优化的空间了。

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

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

相关文章

nodejs+vue+python+PHP+微信小程序南七街道志愿者服务平台的设计与实现-计算机毕业设计推荐

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性&#xff1a;…

简单的小调度器

收集小资源下的简单调度器 https://github.com/sigma318/TOS/tree/master https://github.com/smset028/xxddq

css呼吸效果实现

实现一个图片有规律的大小变化&#xff0c;呈现呼吸效果&#xff0c;怎么用CSS实现这个呼吸效果呢 一.实现 CSS实现动态效果可以使用动画( animation)来属性实现&#xff0c;放大缩小效果可以用transform: scale来实现&#xff0c;在这基础上有了动画&#xff0c;就可以设置一个…

rabbitMq创建交换机,以及路由键绑定队列教程

创建交换机&#xff1a; 创建队列&#xff1a; 创建路由&#xff0c;绑定到交换机&#xff1a;

Java9新增特性

特性列表 模块化系统&#xff1a;Java 9引入了模块化系统&#xff0c;将代码划分为模块&#xff0c;以更好地组织和管理代码。新的日期和时间API&#xff1a;Java 9引入了新的日期和时间API&#xff0c;使得处理日期和时间变得更简单、更强大。HTTP/2支持&#xff1a;Java 9引…

【OJ比赛日历】快周末了,不来一场比赛吗? #11.11-11.17 #12场

CompHub[1] 实时聚合多平台的数据类(Kaggle、天池…)和OJ类(Leetcode、牛客…&#xff09;比赛。本账号会推送最新的比赛消息&#xff0c;欢迎关注&#xff01; 以下信息仅供参考&#xff0c;以比赛官网为准 目录 2023-11-11&#xff08;周六&#xff09; #5场比赛2023-11-12…

python学习笔记-函数

1、使用关键字参数调用函数 2、使用函数的默认值 3、可变参数

07【保姆级】-GO语言的程序流程控制【if switch for while 】

之前我学过C、Java、Python语言时总结的经验&#xff1a; 先建立整体框架&#xff0c;然后再去抠细节。先Know how&#xff0c;然后know why。先做出来&#xff0c;然后再去一点点研究&#xff0c;才会事半功倍。适当的囫囵吞枣。因为死抠某个知识点很浪费时间的。对于GO语言&a…

微信小程序案例3-2 计算器

文章目录 一、运行效果二、知识储备&#xff08;一&#xff09;data-*自定义属性&#xff08;二&#xff09;模块 三、实现步骤&#xff08;一&#xff09;准备工作&#xff08;二&#xff09;实现页面结构&#xff08;三&#xff09;实现页面样式&#xff08;四&#xff09;实…

linux软链接和硬链接

1.硬链接(hard link) 每个文件的磁盘存储位置都有一个指针指向他这个指针称为inode&#xff0c;每创建一个硬链接都是指向这个inode指针&#xff0c;而不是指向这个文件的物理磁盘位置。 当有多个硬链接指向同一个inode&#xff0c;删除其中一个硬链接文件&#xff0c;他的物理…

两数相加 js

道阻且长&#xff0c;行而不辍&#xff0c;未来可期 两数相加 给你两个 非空 的链表&#xff0c;表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的&#xff0c;并且每个节点只能存储 一位 数字。 请你将两个数相加&#xff0c;并以相同形式返回一个表示和的链表。 …

[Matlab]基于LSTM+NSGA2的风光火力发电策略优化

最近比较忙&#xff0c;好久没分享案例啦&#xff0c;今天简单分享一个滚动时域的多目标优化 一 模型介绍 1 风电 2 光伏 3 火电 4 储能 5 用电需求 等五个对象。 其中风电和光伏还有用电需求&#xff0c;用历史数据LSTM网络&#xff0c;训练一个预测模型&#xff1b;火电根据策…

Linux系统编程——文件的打开及创建

打开(open) 使用open函数需要包含以下三个头文件&#xff1a; #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> open的函数定义格式 int open(const char *pathname,int flags); int open(const char *pathname,int flags,mode_t mode…

一篇带你精通php

华子目录 什么是phpphp发展史平台支持和数据库支持网站静态网站和动态网站的区别静态网站动态网站的特点 关键名词解析服务器概念IP的概念域名DNS端口 web程序的访问流程静态网站访问流程动态网站访问流程 php标记脚本标记标准标记&#xff08;常用&#xff09; php注释 什么是…

PDF有限制密码,不能复制怎么办?

大家现在接触PDF文件越来越多&#xff0c;有的时候在网上下载的PDF文件打开之后&#xff0c;发现选中文字之后无法复制。甚至其他功能也都无法使用&#xff0c;这是怎么回事&#xff1f;该怎么办&#xff1f; 当我们发现文件打开之后&#xff0c;编辑功能无法使用&#xff0c;很…

代码审计(某个人发卡系统V6.0(php))

一、前台漏洞 1、前台文件包含漏洞(如果开启了gbc,可远程包含) 注入点1&#xff1a; tyid没任何过滤&#xff0c;存在注入 payload:http://faka.com/ajax.php?actselgo POST传参: tyid1/**/union/**/select/**/*/**/from/**/if_km/**/limit/**/0,1# 注入点2: 也是没加任何…

10-Docker-分布式存储算法

01-哈希取余算法分区 哈希取余分区&#xff08;Hash Modulus Partitioning&#xff09;是一种在分布式计算和数据存储中常用的分区策略&#xff0c;其目的是将数据或计算任务分配到多个节点或服务器上&#xff0c;以实现负载均衡和提高性能。这种分区策略的核心思想是使用哈希…

Python---列表的循环遍历,嵌套

循环遍历就是使用while或for循环对列表中的每个数据进行打印输出 while循环&#xff1a; list1 [貂蝉, 大乔, 小乔]# 定义计数器 i 0 # 编写循环条件 while i < len(list1):print(list1[i])# 更新计数器i 1 for循环&#xff08;推荐&#xff09;&#xff1a; list1 [貂…

小白学安全-KunLun-M静态白盒扫描工具

一、KunLun-M简介 KunLun-M是一个完全开源的静态白盒扫描工具&#xff0c;支持PHP、JavaScript的语义扫描&#xff0c;基础安全、组件安全扫描&#xff0c;Chrome Ext\Solidity的基础扫描。开源地址&#xff1a;https://github.com/LoRexxar/Kunlun-M Cobra是一款源代码安全审计…

springboot中定时任务cron不生效,fixedRate指定间隔失效,只执行一次的问题

在调试计算任务的时候&#xff0c;手动重置任务为初始状态&#xff0c;但是并没有重新开始计算&#xff0c;检查定时任务代码&#xff1a; 从Scheduled(fixedRate 120000)可以看到&#xff0c;应该是间隔120秒执行一次该定时任务&#xff0c;查看后台日志&#xff0c;并没有重…