【LeetCode】一、数组相关(双指针算法 + 置换)

文章目录

  • 1、算法复杂度
    • 1.1 时间复杂度
    • 1.2 空间复杂度
  • 2、数组
  • 3、leetcode485:最大连续1的个数
  • 4、leetcode283:移动0
  • 5、leetcode27:移除元素

1、算法复杂度

1.1 时间复杂度

算法的执行时间与输入值之间的关系(看代码实际总行数的变化) ⇒ 常对幂指阶

在这里插入图片描述

1.2 空间复杂度

算法存储空间与输入值之间的关系(看变量的数量或者对象的数量)

在这里插入图片描述

2、数组

数组特点:

  • 所占的内存空间连续
  • 存储的元素类型相同

访问、搜索、插入、删除的时间复杂度:

在这里插入图片描述

访问时,时间复杂度为O(1)

a[i] = a[0]地址 + i * 元素类型所占字节

搜索时,需要遍历,直到找到a[i]的值等于所查的value,复杂度为O(n),插入和删除时,最坏的情况在数组的开头进行增删,后面的元素都得后退或者前移一格,或者说插入引起了数组的copy到扩容后的新数组,则也是O(n)

在这里插入图片描述

3、leetcode485:最大连续1的个数

在这里插入图片描述
思路:遍历数组,出现一个1就把计数 +1,出现一个0则计数置为0,置为0之前存一下当前的计数值

public class P485 {public static void main(String[] args) {int[] array = {1, 0, 1, 1, 0, 1, 1, 1, 0, 1};System.out.println(column(array));}public static int column(int[] array) {if (null == array || array.length == 0) {return 0;}int result = 0;// 被出现的0打断计数后,存下目前的最大计数值int resultTemp = 0;for (int i : array) {if (i == 1) {result = result + 1;}if (i == 0) {resultTemp = Math.max(result, resultTemp);// 置为0,重新计数result = 0;}}return Math.max(result, resultTemp);}
}

测试:

在这里插入图片描述

4、leetcode283:移动0

在这里插入图片描述

一开始想的是:遍历找为0的元素,找到一个就将其后面的所有元素往前移动一位,然后将这个为0的元素自身扔在数组末尾。操作次数太多。

转向考虑找非0的,找到第一个,就将其放到index = 0 的位置,并且index计数加一,准备等下一个非0的元素,依次往后放非0元素,遍历完后,index后面剩下的空位都补0即可。

public class P283 {public static void main(String[] args) {int[] array = {1, 0, 9, 0, 6, 8, 0};for (int i : move(array)) {System.out.print(i + ",");}}public static int[] move(int[] array) {// 记录非0元素下标位置(像一个指针,告诉我目前非0元素放到几号空位了)int index = 0;for (int i = 0; i < array.length; i++) {if (array[i] != 0) {// 非0元素前移array[index] = array[i];index++;}}// 剩余空位全部为0for (; index < array.length ; index++) {array[index] = 0;}return array;}
}

在这里插入图片描述

5、leetcode27:移除元素

在这里插入图片描述

思路:双指针算法 + 置换

在这里插入图片描述
左右两个指针,L指针向右找等于要移除的val的位置停下来,R指针向左找不等于val的位置停下来,然后两个位置的元素置换。如此,右边的就全是要移除的值,左边的数量即为该题的返回值。

当左指针L >= 右指针R时,说明已经全部遍历了一遍了,此时,看下,如果L所在的值为val,说明其前面全都是不等于val的值,比如L为4,说明当前位置下标为4,前面为0、1、2、3这四个元素,返回的数量就是4,也即L的值,反之,L所在的值不等于val,说明当前位置的值及其前面的值,都是不等于val的值,数量 = 索引 + 1,返回L + 1

public class P27 {public static void main(String[] args) {int[] array = {1, 0, 9, 0, 6};System.out.println(remove(array, 0));}public static int remove(int[] array, int val) {if (array == null || array.length == 0) {return 0;}int left = 0;int right = array.length - 1;while (left < right) {// 没找到左边等于val的值前,一直找while (left < right && array[left] != val) {left++;}// 没找到右边不等于val的值前,一直找while (left < right && array[right] == val) {right--;}// 置换,把数组中等于value的元素扔右边int temp = array[left];array[left] = array[right];array[right] = temp;}if (array[left] == val) {return left;} else {return left + 1;}}
}

测试:
在这里插入图片描述

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

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

相关文章

NineData和华为云在一起!提供一站式智能数据库DevOps平台

以GuassDB数据库为底座 NineData和华为云一起 为企业提供 一站式智能数据库DevOps平台 帮助开发者 高效、安全地完成 数据库SQL审核 访问控制、敏感数据保护等 日常数据库相关开发任务 NineData 智能数据管理平台 NineData 作为新一代的云原生智能数据管理平台&#xf…

HSRP热备份路由协议(VRRP虚拟路由冗余协议)配置以及实现负载均衡

1、相关原理 在网络中&#xff0c;如果一台作为默认网关的三层交换机或者路由器损坏&#xff0c;所有使用该网关为下一跳的主机通信必然中断&#xff0c;即使配置多个默认网关&#xff0c;在不重启终端的情况下&#xff0c;也不能彻底换到新网关。Cisco提出了HSRP热备份路由协…

运算符重载详解(完全版)

1.运算符重载 C为了增强代码的可读性引入了运算符重载&#xff0c;运算符重载是具有特殊函数名的函数&#xff0c;也具有其返回值类型&#xff0c;函数名字和参数列表&#xff0c;其返回值类型与参数列表都与普通的函数类似 函数名&#xff1a;关键字operator后面接需要重载的…

Interview preparation--Elasticsearch写入原理与调优

ES的写入过程 ES支持的写操作 create&#xff1a; create操作不同于put操作&#xff0c;put操作的时候如果当前put的数据存在则会被覆盖&#xff0c;如果put操作的时候加上操作类型create&#xff0c;如果数据存在则会返回失败&#xff0c;比如&#xff1a;PUT /pruduct/_cre…

Ubuntu20.04安装python2和python3及版本配置

Ubuntu20.04安装python2和python3及版本配置_ubuntu 20.04 python3-CSDN博客https://blog.csdn.net/pangc2014/article/details/117407413 >>>ubuntu 安装源码python2_mob649e8161c39d的技术博客_51CTO博客https://blog.51cto.com/u_16175489/7327966

大厂薪资福利篇第四弹:字节跳动

欢迎来到绝命Coding&#xff01; 今天继续更新大家最关心的 大厂薪资福利系列&#xff01; 往期分享&#xff1a; 福利开水喝不完&#xff1f;大厂薪资福利篇&#xff01;美团 职场文化发源地&#xff1f;大厂薪资福利篇&#xff01;阿里巴巴 给这么多&#xff01;还能带宠物上…

MFC案例:自制工具条(Toolbar)按钮的小程序

程序目标&#xff1a;在基于对话框的MFC项目中&#xff0c;自制三个 Toolbar 按钮&#xff08;用颜色区分&#xff0c;分别为红、绿、蓝&#xff09;&#xff1b;程序运行时&#xff0c;单击红色按钮显示一个红色的填充椭圆&#xff1b;再单击绿色按钮则进行清屏&#xff1b;最…

[hive] posexplode生成从去年一月一号,到本月的月时间表

生成从去年一月一号&#xff0c;到本月的月时间表 posexplode用法&#xff1a; lateral view 表别名 as 序号列名,数组中的元素的名 1、生成序列 SELECT time_stamp_fist_day_of_last_year,--去年第一天的时间戳numfrom(SELECTsplit(repeat_o,,) o_array,time_stamp_fist_da…

用英文介绍纽约:NEW YORK, USA‘s MEGACITY

NEW YORK, USA’s MEGACITY | America’s Largest City Link: https://www.youtube.com/watch?vdzjQ-akB3BI&listPLmSQiOQJmbZ7TU39cyx7gizM9i8nOuZXy&index24 The story of New York City, America’s megalopolis. Summary Paragraph 1: The Historical Developm…

Chrome插件:​Vue.js Devtools 高效地开发和调试

在现代前端开发中&#xff0c;Vue.js因其灵活性和性能优势&#xff0c;受到越来越多开发者的青睐。然而&#xff0c;随着项目规模的扩大&#xff0c;调试和优化变得愈发复杂。幸运的是&#xff0c;Vue.js Devtools的出现&#xff0c;为开发者提供了一套强大的工具集&#xff0c…

vue大屏适配方案

前言 开发过大屏的铁汁们应该知道&#xff0c;前期最头疼的就是大屏适配&#xff0c;由于大屏项目需要在市面上不是很常见的显示器上进行展示&#xff0c;所以要根据不同的尺寸进行适配&#xff0c;今天我将为大家分享的我使用的大屏适配方案&#xff0c;话不多说&#xff0c;直…

Matlab|风光及负荷多场景随机生成与缩减

目录 1 主要内容 计算模型 场景生成与聚类方法应用 2 部分程序 3 程序结果 4 下载链接 1 主要内容 该程序方法复现了《融合多场景分析的交直流混合微电网多时间尺度随机优化调度策略》3.1节基于多场景技术的随机性建模部分&#xff0c;该部分是随机优化调度的重要组成部分…

轻松掌握:工科生如何高效阅读国际期刊和撰写论文(下)

⭐️我叫忆_恒心&#xff0c;一名喜欢书写博客的研究生&#x1f468;‍&#x1f393;。 如果觉得本文能帮到您&#xff0c;麻烦点个赞&#x1f44d;呗&#xff01; 近期会不断在专栏里进行更新讲解博客~~~ 有什么问题的小伙伴 欢迎留言提问欧&#xff0c;喜欢的小伙伴给个三连支…

透明屏幕的魅力:为何它如此受欢迎

在科技日新月异的今天&#xff0c;透明屏幕技术以其独特的魅力和广泛的应用前景&#xff0c;逐渐成为了科技领域的一颗璀璨明星。从智能手机、平板电脑到大型显示屏&#xff0c;透明屏幕技术以其前所未有的视觉体验和实用性&#xff0c;赢得了广大消费者的喜爱。 一、透明屏幕的…

docker 镜像突然拉取不了,教你解决

最近我们可以发现&#xff0c;在Linux系统里拉取不了镜像了&#xff0c;翻墙也拉取不了&#xff0c;这时候我们可以有一个新的docker 镜像同步网站来解决这个问题 一、首先打开镜像官网&#xff08;需要翻墙&#xff09; https://hub.docker.com/ 然后搜索一个镜像 搜索最新…

Nginx实战:简单登录验证配置(基于openssl)

本文提供的是基于openssl创建的密码文件,对nginx指定的location访问。进行登录验证的配置方式。 1、验证页面配置 我的nginx实验环境是直接yum安装的,如果是自己编译安装的那么对应目录就是自己安装配置的目录。 先在/usr/share/nginx/html下创建一个usertest.html,里面添加…

Spring Cache常见问题解决

目录 一 报错:Null key returned for cache operation 二 报错&#xff1a;类型转换异常 三 取出的数据为null 一 报错:Null key returned for cache operation 这里报错有两种情况&#xff1a; 第一&#xff0c;如果你在新增的方法上使用Cacheable注解&#xff0c;那么肯定是…

绝望中迎来曙光,阿里大模型算法岗 Offer 突然来了!

节前&#xff0c;我们组织了一场算法岗技术&面试讨论会&#xff0c;邀请了一些互联网大厂朋友、今年参加社招和校招面试的同学。 针对大模型技术趋势、算法项目落地经验分享、新手如何入门算法岗、该如何准备面试攻略、面试常考点等热门话题进行了深入的讨论。 总结链接如…

用定时器T1中断控制两个LED以不同周期闪烁

#include<reg51.h> // 包含51单片机寄存器定义的头文件 sbit D1P2^0; //将D1位定义为P2.0引脚 sbit D2P2^1; //将D2位定义为P2.1引脚 unsigned char Countor1; //设置全局变量&#xff0c;储存定时器T1中断次数 unsigned char Countor2; //设置全局变量&#xff0c;储…

virutalBox安装debian并配置docker环境

下载镜像 https://gemmei.ftp.acc.umu.se/debian-cd/current/amd64/iso-cd/debian-12.5.0-amd64-netinst.iso 虚拟机安装 如何在Virtual Box 上安装Debian系统_virtual box debian iso netinst-CSDN博客 启动命令行模式 如何设置Debian图形启动或命令行界面启动&#xff1…