当前位置:网站首页>数组与字符串14-使用双指针移除元素
数组与字符串14-使用双指针移除元素
2022-08-03 05:25:00 【花开花落夏】
使用双指针移除元素
一 题目
源自leetcode官网
给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。
二 解题
使用两个指针left与right,right遍历整个数组,碰到val值就跳过,left也遍历数组,碰到val值就标记,后续再将其它元素移动到val位置。
class Solution {
public int removeElement(int[] nums, int val) {
int left=0;
for(int right=0;right<nums.length;right++){
if(nums[right]==val){
continue;
}else if(left==right){
left++;
}else {
nums[left]=nums[right];
left++;
}
}
return left;
}
}
三 优化
对于如下所示的数组,当val=3时,若left=right=0,则遍历时需要为除0位置之外的元素都移动位置。
我们可以优化这一流程,设left=0,right=nums.length-1。若left的值等于val,则将right的值移动到left的位置。
代码:
class Solution {
public int removeElement(int[] nums, int val) {
int left=0,right=nums.length-1;
while (left<=right){
if(nums[left]==val){
nums[left]=nums[right];
right--;
}else{
left++;
}
}
return left;
}
}
边栏推荐
猜你喜欢

003_旭日X3派初探:利用无线串口通信控制舵机

自监督论文阅读笔记 S3Net:Self-supervised Self-ensembling Network for Semi-supervised RGB-D Salient Object Det

增强光学系统设计 | Zemax 全新 22.2 版本产品现已发布!

自监督论文阅读笔记 Incremental-DETR:Incremental Few-Shot Object Detection via Self-Supervised Learning

自监督论文阅读笔记Efficient Self-supervised Vision Pretraining with Local Masked Reconstruction

网络间通信

自监督论文阅读笔记SELF-SUPERVISED SPECTRAL MATCHING NETWORK FOR HYPERSPECTRAL TARGET DETECTION

自监督论文阅读笔记DisCo: Remedy Self-supervised Learning on Lightweight Models with Distilled Contrastive

【第一周】深度学习和pytorch基础

自监督论文阅读笔记Reading and Writing: Discriminative and Generative Modelingfor Self-Supervised Text Recogn
随机推荐
Hook初探索
STM32启动文件的选择
NIO知识汇总 收藏这一篇就够了!!!
西塞罗 论老年
A.1#【内存管理】——1.1.2 zone: struct zone
IPC通信 - 管道
自监督论文阅读笔记Index Your Position: A Novel Self-Supervised Learning Method for Remote Sensing Images Sema
Makefile自动推导的简单例程
自监督论文阅读笔记 DetCo: Unsupervised Contrastive Learning for Object Detection
2021-04-23
卷积神经网络入门
POE交换机全方位解读(中)
opencv
ZEMAX | 如何创建简单的非序列系统
cobalt strike 的基础使用
内网渗透信息收集
2021-03-22
对象の使用
二叉树常见的问题和解决思路
g++参数说明