【New Star】LeetCode 数组学习
人的梦想,永远不会结束!——黑胡子
继续我的leetcode刷题,才28道,不知道什么有200道题!
27. 移除元素
要知道数组的元素在内存地址中是连续的,不能单独删除数组中的某个元素,只能覆盖。
双指针法
双指针法(快慢指针法): 通过一个快指针和慢指针在一个for循环下完成两个for循环的工作。
双指针法(快慢指针法)在数组和链表的操作中是非常常见的,很多考察数组、链表、字符串等操作的面试题,都使用双指针法。
快慢指针做法可以减少时间复杂度 ,从两个for变成一个for
class Solution {public int removeElement(int[] nums, int val) {int low = 0;for(int high = 0;high< nums.length; high ++){if(val != nums[high]){nums[low ++] = nums[high];}}return low;}
}
相向双指针方法
相向双指针方法,基于元素顺序可以改变的题目描述改变了元素相对位置,确保了移动最少元素
这就是首尾指针
> class Solution {> public int removeElement(int[] nums, int val) {> int left = 0,right = nums.length -1;
> while(left<= right){> while(left <= right && nums[left] !=val){//这里是while而不是if
> left ++;
> }
> while(right >= left && nums[right] == val){> right --;//--而不是++
> }
> if(left <=right){> nums[left++] =nums[right--];
> }
> }
> return left;
>
> } }
26.删除排序数组中的重复项
想法是 不重复就替代,重复就直接进行下一次循环
class Solution {public int removeDuplicates(int[] nums) {int low = 0;for(int high = 1; high < nums.length;high++){if(nums[low] ==nums[high])continue;else{nums[++low] = nums[high];}}return low+1; //low是数组的下标 而要返回的是数组的长度 }
}
283. 移动零
需要保证数组的相对有序 没有保证有序 这是错误做法
class Solution {public void moveZeroes(int[] nums) {int left = 0 ,right = nums.length -1;while(left <= right){while(left <= right && nums[left]!= 0)left++;while(right >=left && nums[right] ==0)right--;if(left <=right){nums[left++] = nums[right--];}}}
}
正确解法:
class Solution {public void moveZeroes(int[] nums) {int low = 0;for(int high = 0; high < nums.length; high++){if(nums[high] !=0 ){nums[low++] =nums[high];}}for(int i = low ; i < nums.length; i++)nums[i] = 0;}
}
【New Star】LeetCode 数组学习相关推荐
- leetcode组队学习——查找(二)
文章目录 1.两数之和 15. 三数之和 16. 最接近的三数之和 18. 四数之和 454. 四数相加 II 49. 字母异位词分组 447. 回旋镖的数量 149. 直线上最多的点数 1.两数之和 ...
- leetcode组队学习——动态规划
文章目录 主要思想 模板步骤 例题 300. 最长上升子序列 674. 最长连续递增序列 5. 最长回文子串 516. 最长回文子序列 72. 编辑距离 198. 打家劫舍 213. 打家劫舍 II ...
- NumPy 数组学习手册·翻译完成
原文:Learning NumPy Array 协议:CC BY-NC-SA 4.0 欢迎任何人参与和完善:一个人可以走的很快,但是一群人却可以走的更远. 在线阅读 ApacheCN 面试求职交流群 ...
- GitHub 近两万 Star!深度学习 500 问带你入门人工智能!| 技术头条
作者 | 非主流.Jane 出品 | CSDN AI 科技大本营(ID:rgznai100) 程序员转行学什么语言? https://edu.csdn.net/topic/ai30?utm_sourc ...
- 转载Shell 数组学习
转载Shell 数组学习 linux shell在编程方面比windows 批处理强大太多,无论是在循环.运算.已经数据类型方面都是不能比较的. 下面是个人在使用时候,对它在数组方面一些操作进行的总结 ...
- CDA Day 7-8 Excel 数组学习总结2
Excel数组学习总结 在还没有深入学习Excel之前,数组和Offset可谓是我眼中的战斗机,难点加难点. 新知识点 Sumproduct是一个数组函数,里面的参数用逗号作为分隔符,不同参数之间是乘 ...
- python numpy数据类型_Python之numpy数组学习(一)
原标题:Python之numpy数组学习(一) 我回来了. 前言 前面已经安装并学习了Python中的科学计算库,今天主要学习下numpy数组. Numpy数组对象 Numpy中的多维数组称为ndar ...
- Fortran数组学习
一.声明方式 数据在内存中都是线状储存的 1.一维 datatype name(size) ! datatype 是数组的类型,有整型.实型.复型.逻辑型.自定义型 ! name 数组的名字 ! si ...
- 如此好的树状数组学习资料
树状数组学习系列1 之 初步分析--czyuan原创 其实学树状数组说白了就是看那张图,那张树状数组和一般数组的关系的,看懂了基本就没问题了,推荐下面这个教程:http://www.topcoder. ...
最新文章
- 计算机学院心理节活动,计算机学院成功举办 “说出你的故事” 心理交流互助活动...
- pdo mysql bindparam_pdo连接mysql prepare,bindParam插入数据
- java se翻译_(翻译)Java SE 8 Lambda 标准库概览(下)
- ITK:越界像素返回常数值
- Docker 环境的快速搭建
- 【全国动态】服务器列表
- qtp启动java程序_转: QTP六脉神剑之调用Java程序
- C#网络编程(同步传输字符串) - Part.2
- 吴裕雄 Bootstrap 前端框架开发——Bootstrap 网格系统实例:响应式的列重置
- App后台开发运维和架构实践学习总结(4)——APP的注册和登录功能设计
- win8 开发之旅(5) --五子棋游戏开发
- esxi时区设置 +8_ESXI安装OpenWRT amp; LEDE软路由部署指南(附镜像下载)
- Window系统下 MongoDB 下载 和 安装
- 【转】一个SQL查询出每门课程的成绩都大于80的学生姓名
- 基于java五子棋游戏设计与实现
- 如何自学成为程序员?
- 关于win10自带邮箱绑定163邮箱的设置
- 人民币美元兑换程序python简单_纯代码实现人民币兑换美元
- Api 接口文档是什么?如何直接使用 ApiDoc 生成接口文档
- 最多只需三步,彻底解决VB6中不能加载MSCOMCTL.OCX的提示
热门文章
- 【hive】数据倾斜-大表小表join优化mapjoin
- python画图marker显示_python matplotlib 画图刻度、图例等字体、字体大小、刻度密度、线条样式设置...
- rabbitmq基础1——消息中间件概念、Rabbitmq的发展起源和基本组件的作用流程
- 实现输入一个十进制正整数转换为二进制输出
- vulnhub之sherlock
- 手把手教你在Photoshop中使用曲线工具
- 贪心:将真分数用埃及分数之和表示
- 乐迪(RadioLink)Mini Pix组装六旋翼无人机疑难杂症解决1——只有4个电机转
- mdf ldf 导入 mysql_mdf和ldf导入数据库
- 分享一个专门提供MV下载的博客