二维数组删除_「leetcode」数组:总结篇!(一文搞懂数组题目)

cb34e9a0a6dc674175167547e38a78bd.png

数组理论基础

数组是非常基础的数据结构,在面试中,考察数组的题目一般在思维上都不难,主要是考察对代码的掌控能力

也就是说,想法很简单,但实现起来 可能就不是那么回事了。

首先要知道数组在内存中的存储方式,这样才能真正理解数组相关的面试题

「数组是存放在连续内存空间上的相同类型数据的集合。」

数组可以方便的通过下表索引的方式获取到下表下对应的数据。

举一个字符数组的例子,如图所示:

995d07f594fc06a2e0ca3ac48074d2eb.png

需要两点注意的是

  • 「数组下表都是从0开始的。」
  • 「数组内存空间的地址是连续的」

正是「因为数组的在内存空间的地址是连续的,所以我们在删除或者增添元素的时候,就难免要移动其他元素的地址。」

例如删除下表为3的元素,需要对下表为3的元素后面的所有元素都要做移动操作,如图所示:

dd7fe10f8e46f17b8e475610f74406c2.png

而且大家如果使用C++的话,要注意vector 和 array的区别,vector的底层实现是array,严格来讲vector是容器,不是数组。

「数组的元素是不能删的,只能覆盖。」

那么二维数组直接上图,大家应该就知道怎么回事了

8566190d78d451f8dd209ae26b0346b6.png

「那么二维数组在内存的空间地址是连续的么?」

我们来举一个例子,例如:int[][] rating = new int[3][4]; , 这个二维数据在内存空间可不是一个 3*4 的连续地址空间

看了下图,就应该明白了:

a3a99359537c5622778c448f2fa18a81.png

所以「二维数据在内存中不是 3*4 的连续地址空间,而是四条连续的地址空间组成!」

数组的经典题目

在面试中,数组是必考的基础数据结构。

其实数据的题目在思想上一般比较简单的,但是如果想高效,并不容易。

我们之前一共讲解了四道经典数组题目,每一道题目都代表一个类型,一种思想。

二分法

数组:每次遇到二分法,都是一看就会,一写就废

这道题目呢,考察的数据的基本操作,思路很简单,但是在通过率在简单题里并不高,不要轻敌。

可以使用暴力解法,通过这道题目,如果要求更优的算法,建议试一试用二分法,来解决这道题目

暴力解法时间复杂度:O(n)
二分法时间复杂度:O(logn)

在这道题目中我们讲到了「循环不变量原则」,只有在循环中坚持对区间的定义,才能清楚的把握循环中的各种细节。

「二分法是算法面试中的常考题,建议通过这道题目,锻炼自己手撕二分的能力」

双指针法

  • 数组:就移除个元素很难么?

双指针法(快慢指针法):「通过一个快指针和慢指针在一个for循环下完成两个for循环的工作。」

暴力解法时间复杂度:O(n^2)
双指针时间复杂度:O(n)

这道题目迷惑了不少同学,纠结于数组中的元素为什么不能删除,主要是因为以下两点:

  • 数组在内存中是连续的地址空间,不能释放单一元素,如果要释放,就是全释放(程序运行结束,回收内存栈空间)。
  • C++中vector和array的区别一定要弄清楚,vector的底层实现是array,所以vector展现出友好的一些都是因为经过包装了。

双指针法(快慢指针法)在数组和链表的操作中是非常常见的,很多考察数组和链表操作的面试题,都使用双指针法。

滑动窗口

  • 数组:滑动窗口拯救了你

本题介绍了数组操作中的另一个重要思想:滑动窗口。

暴力解法时间复杂度:O(n^2)
滑动窗口时间复杂度:O(n)

本题中,主要要理解滑动窗口如何移动 窗口起始位置,达到动态更新窗口大小的,从而得出长度最小的符合条件的长度。

「滑动窗口的精妙之处在于根据当前子序列和大小的情况,不断调节子序列的起始位置。从而将O(n^2)的暴力解法降为O(n)。」

如果没有接触过这一类的方法,很难想到类似的解题思路,滑动窗口方法还是很巧妙的。

模拟行为

  • 数组:这个循环可以转懵很多人!

模拟类的题目在数组中很常见,不涉及到什么算法,就是单纯的模拟,十分考察大家对代码的掌控能力。

在这道题目中,我们再一次介绍到了「循环不变量原则」,其实这也是写程序中的重要原则。

相信大家又遇到过这种情况:感觉题目的边界调节超多,一波接着一波的判断,找边界,踩了东墙补西墙,好不容易运行通过了,代码写的十分冗余,毫无章法,其实「真正解决题目的代码都是简洁的,或者有原则性的」,大家可以在这道题目中体会到这一点。

总结

从二分法到双指针,从滑动窗口到螺旋矩阵,相信如果大家真的认真做了「代码随想录」每日推荐的题目,定会有所收获。

推荐的题目即使大家之前做过了,再读一遍的文章,也会帮助你提炼出解题的精髓所在。

「如果感觉有所收获,希望大家多多支持,打卡转发,点赞在看 都是对我最大的鼓励!」

最后,大家周末愉快!

本文:

https://github.com/youngyangyang04/leetcode-master​github.com

已经收录,里面还有leetcode刷题攻略、各个类型经典题目刷题顺序、思维导图,可以fork到自己仓库,有空看一看一定会有所收获,如果对你有帮助也给一个star支持一下吧!

我的B站(里面有我讲解的算法视频已经编程相关知识):

哔哩哔哩 ( ゜- ゜)つロ 乾杯~ Bilibili​space.bilibili.com
我是程序员Carl,哈工大师兄,先后在腾讯和百度从事技术研发多年,利用工作之余重刷leetcode,更多精彩算法文章尽在:代码随想录,关注后,回复「Java」「C++」「python」「简历模板」等等,有我整理多年的学习资料,可以加我微信,备注「个人简介」+「组队刷题」,拉你进入刷题群(无任何广告,纯个人分享),每天一道经典题目分析,我选的每一道题目都不是孤立的,而是由浅入深一脉相承的,如果跟住节奏每篇连续着看,定会融会贯通。

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

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

相关文章

TextView显示颜色高亮的问题

TextView textView (TextView) findViewById( R.id.tv );String text "<font color\"#d93b3a\">" "快过年了" "</font>" "<font color\"#666666\">" "哈哈哈哈" "</…

开源GIS解决方案,暨GeoServer+OpenLayer结合开发总结

http://linking123.github.io/2018/07/21/%E5%BC%80%E6%BA%90GIS%E8%A7%A3%E5%86%B3%E6%96%B9%E6%A1%88%EF%BC%8C%E6%9A%A8GeoServer-OpenLayer%E7%BB%93%E5%90%88%E5%BC%80%E5%8F%91%E6%80%BB%E7%BB%93/ – 0.感叹 – 1.文档说明 – 2.文档内容 — 2.1 GeoServer - 地图服务 —…

TOJ---2621--全排列

这个方法 是超神教我的 --- 全排列的方法太多种了 感觉他这种写的 字典序法 是最简单的 最容易让人接受的 而且在时间复杂度和空间复杂度上 都可以让人接受 我待会将具体每步做法简要写一下...-> 我现在被一个 三角形给 深深烦死了 。。。。。。贴个代码 来 缓解下..... 1 …

Azure 和 Linux

Azure 正在不断集结各种集成的公有云服务&#xff0c;包括分析、虚拟机、数据库、移动、网络、存储和 Web&#xff0c;因此很适合用于托管解决方案。 Azure 提供可缩放的计算平台&#xff0c;允许即用即付&#xff0c;而无需投资购买本地硬件。 Azure 允许根据客户端所需的任何…

java获取classpath以外的路径

最近在使用以前写过的代码生成器&#xff08;从表名可生成所有的代码&#xff09;的时候&#xff0c;发现生成的文件都在classpath目录下&#xff0c;所有的文件都得自己拷到工程目录下&#xff0c;于是&#xff0c;想优化一下&#xff0c;取得classpath目录以外的路径&#xf…

月份第一天_4月份的第一天,全省迎来晴暖天气~

2019年4月1日早上好北方新农村准时准点播报~▼▼▼今天是2019年4月1日星期一辽宁的天气小孩的脸说变就变上周末突如其来的一场雪&#xff0c;让辽宁大部分地区“措手不及”已经开始回升的温度瞬间跌落到谷底。但不管怎样&#xff0c;随着节气的更迭&#xff0c;冷空气终究大势已…

Windows系统下搭建Git本地代码库

近由于工作需要&#xff0c;要把工作代码做一下版本管理。工作代码也不方便放到github上&#xff0c;也不想付费建私密库&#xff0c;公司也没几个人&#xff0c;所以就想着搭建一个本地Git版本库&#xff0c;来做版本管理。搭建过程如下。 系统环境&#xff1a;Dell OptiPlex…

mac 下终端 操作svn命令 以及出现证书错误的处理方法

首先&#xff0c;转载地址&#xff1a;http://hi.baidu.com/zhu410289616/item/eaaf160f60eb0dc62f4c6b0e 还有一个地址&#xff1a;http://www.cnblogs.com/heiniuhaha/archive/2011/11/11/2245594.html 解决证书出错&#xff0c;错误见下图&#xff1a; 解决方法&#xff1a;…

Linux shell multifile content replace with sed

#!/bin/bash# Linux shell multifile content replace with sed # 声明&#xff1a; # 本源代码主要是利用两份&#xff08;中、英文&#xff09;具有相同键值对的json数据&#xff0c;对html内的中文进行 # 自动化文本替换的代码。 # # …

jquery实时监听输入框值变化

在做web开发时候很多时候都需要即时监听输入框值的变化&#xff0c;以便作出即时动作去引导浏览者增强网站的用户体验感。而采用onchange时间又往往是在输入框失去焦点&#xff08;onblur&#xff09;时候触发&#xff0c;有时候并不能满足条件。 首先看一下dom中元素事件&…

文件过滤_jmeter(七)-BeanShell对数据过滤保存文件

在测试中有时需要对参数化数据进行过滤&#xff0c;实现保存到一个文件。如&#xff1a;某项目&#xff0c;从数据库查询到10万条用户数据&#xff0c;因为有的用户没有权限或者过期了&#xff0c;需要对这份数据筛选出来能正常使用的用户。如下使用beanshell实现此功能。原文件…

如何在mac系统下搭建git服务器

https://zhidao.baidu.com/question/1823748339128066228.html 第一步,下载gitblit http://gitblit.com/ 这里当然是选择linux/osx的版本。下载下来是一个.tar.gz的压缩文件&#xff0c;我下载时最新版本是gitblit-1.7.1.tar.gz 第二步&#xff0c;配置gitblit 创建目录&…

高级开发面试题

1.以前公司做过哪些项目&#xff1b; 2.这些项目都用到哪些技术&#xff1b; 3.redis里有哪些数据类型&#xff0c;对比memcache和redis&#xff1b; 4.目前平台的系统架构&#xff1b; 5.dubbo的server分了几个&#xff0c;怎么分的&#xff1b; 6.集群的负载策略&#xff1b;…

部品se分析_汽车储物箱部品模具,二色产品模具专业厂

汽车储物箱部品模具PVC塑料型材挤出模具是挤出生产线的核心部分&#xff0c;它包括口模(又称模头)、定型模、冷却水箱等。口模通过法兰盘与挤出机机头上的法兰盘组装在一起&#xff0c;安装加热圈、加热板&#xff0c;接通电源和热电偶。定型模和冷却水箱装用螺钉固定在定型台&…

WordPress二次开发经验简短总结

1.建议直接在客户给的服务器环境上安装WordPress程序再二次开发&#xff0c;如果在自己的开发机上安装好后再迁移过去&#xff0c;不同版本数据库或不同版本PHP环境可能会砸出坑。 2.由于国情原因&#xff0c;大陆访问googleapis.com呈现龟速特征&#xff0c;参考我之前的文章…

【Lucene4.8教程之五】Luke

一、Luke基本内容 1、Luke简介 Luke可用于查看Lucene创建的索引&#xff0c;并对其进行基本操作。 2、创建Luke &#xff08;1&#xff09;从Github上下载源文件 https://github.com/tarzanek/luke &#xff08;2&#xff09;解压文件后&#xff0c;打开DOS窗口&#xff0c;进入…

计算mView在view周围的位置

为什么80%的码农都做不了架构师&#xff1f;>>> /*** 计算mView在view周围的位置** param view** param mMargin mView与view或边界的间距* * titleBarHeight 标题栏的高度* mContext当前的Activity*/private void aroundView(View view, float mMargin) …

微信小程序6 - 页面之间传参及通知系统封装

1. 简单传参 wx.navigateTo({url: /pages/demo/index/index?id1})/pages/demo/index/index.js 中onLoad(options){var id options.id; //获取通过url参数传递来的参数}2. 复杂传参var json JSON.stringify({a:1});wx.navigateTo({url: /pages/demo/index/index?json json})…

aardio教程_官方AARDIO课程已经开课了!学习的速来报道!

aardio视频培训课程(2018新版)因为课程都是制作视频 - 所以上课时间不受限制。1、本次课程共计50节视频课程&#xff0c;每周一课&#xff0c;培训时间为一年(1月15日以后报名按报名交费时间开始计算)。2、所有参加本次培训课程 &#xff0c;可同时获取为期2年的技术支持服务(1…

php 开源建站工具 -- 资料收集

迅睿 CMS 开源建站程序 XunRuiCMShttps://www.xunruicms.com/