当前位置: 首页 > article >正文

算法——移除元素(leetcode27)

对于移除元素这道题来讲,我首先想到的还是双指针,根据题目要求我们需要在给定的一组数组中找出与目标值不同的元素数量并且将与目标值不同的元素全部移至数组左边右边则不需关注数组元素的大小,我们利用两个指针一个指向数组首部位置(左指针)一个指向末端位置(右指针),如果首部位置所指元素与目标值相同则将右指针所指元素对左指针所指元素进行覆盖接着右指针向左移动如果不同则左指针向右移动重复上述步骤即可直至左指针越过右指针循环结束我们直接返回左指针下标即可(即为与目标值不同的元素数量总和)

这种方法比较正式的称呼是相向双指针法

class Solution {
    public int removeElement(int[] nums, int val) {
        int left=0;
        int right=nums.length-1;
        int sum=0;
        while(left<=right){
            if(nums[left]==val){
                nums[left]=nums[right];
                right--;
            } else{
                sum++;
                left++;
            }  
        }
        return sum;
     }
}

除此之外还有快慢指针法可以解决这个问题

快慢指针法

通过快指针来寻找与目标值不同的元素

通过慢指针来更新数组即可

class Solution {
    public int removeElement(int[] nums, int val) {
        int fastIndex=0;
        int slowIndex=0;
        while(fastIndex<=nums.length-1){
           if(nums[fastIndex]==val){
            fastIndex++;
           }else{
            nums[slowIndex]=nums[fastIndex];
            slowIndex++;
            fastIndex++;
           }
     }
     return slowIndex;
}
}


http://www.kler.cn/a/391269.html

相关文章:

  • 音视频入门知识(二)、图像篇
  • Glossary 词汇表中英文对照
  • Flink中并行度和slot的关系——任务和任务槽
  • 【求职面试】驾照的种类
  • Ruby+Selenium教程
  • STM32-笔记11-手写带操作系统的延时函数
  • el-input 正则表达式校验输入框不能输入汉字
  • 工位管理现代化:Spring Boot企业级框架
  • WPF 应用程序中使用 Prism 框架时,有多种方式可以注册服务和依赖项
  • 最大子数组和
  • vector和docker的区别?
  • RK3568平台开发系列讲解(GPIO篇)基于整数的GPIO接口
  • https网站 请求http图片报错:net::ERR_SSL_PROTOCOL_ERROR
  • 低空载功耗,高能源利用率 BDA5-20W BOSHIDA DCDC
  • 区块链赋能Web3:数据透明与隐私保护的新纪元
  • 如何解决亚马逊商家IP问题:静态住宅IP的优势与选择指南
  • C#界面设计
  • 深度学习中gpu的写法
  • 另一个角度的“业务向前,数据库向后”
  • Rust 整数
  • vue读取本地excel文件并渲染到列表页面
  • 低代码开发
  • Tofu AI视频处理模块视频输入配置方法
  • LeetCode 热题100 之 多维动态规划
  • 在 Flutter 应用中调用后端接口的方法
  • Linux高阶——1109—线程函数线程属性线程分类