首页 > 其他分享 >移除元素

移除元素

时间:2024-10-16 21:42:58浏览次数:6  
标签:right nums 基准值 元素 移除 指针 left

[https://leetcode.cn/problems/remove-element/](移除元素)
要求是原地移动,并且不能使用额外的数组空间(如果不是原地移动并且可以用额外空间的话,可以排序后遍历去除重复元素)可以考虑使用双指针法。 当快指针指向的值等于val时,快指针向前移动寻找下一个不等于val的值;当快指针指向的值不等于val时,将快指针指向的值赋给慢指针,慢指针递增表示左边处理完成;快指针和慢指针之间的值是val,快指针右边的值代表未处理的值。

相关题目:
[https://leetcode.cn/problems/remove-duplicates-from-sorted-array/](删除排序数组中的重复项)
要求是原地移动并且不能使用额外数组空间,数组是非递减排序,所以考虑双指针法。快指针寻找下一个不重复元素,当找到不重复的第一个元素时,将slow的下一个值改为这个元素。因为返回元素个数,所以返回slow+1。

[https://leetcode.cn/problems/move-zeroes/](移动零)
双指针法典型题型:fast指针找不等于0的元素,当fast指针指向的值不等于零时,将此值赋给slow指针指向的值,slow递增。slow右边是已处理的元素,中间是0,右边是已处理的元素。

快速排序
双指针法的典型应用
选基准值,通过双指针移动使得基准值的左边全都小于等于基准值,基准值的右边全都大于等于基准值;一般取第一个元素为基准值。
先让right指针从右到左移动,遇到比基准值小的值就将他赋给left指针(一开始指向基准值),left指针递增1;然后left指针从左到右移动,遇到比基准值小的值就将它赋给right指针,right指针递减后循环重新开始。直到left = right时循环结束,然后将base基准值赋给left指针。最后递归地进行左区间和右区间的排序。
`//快速排序:双指针法
void quicksort(vector& nums, int start, int end) {
if (start > end || start < 0) return;
int left = start, right = end;
int base = nums[start];

    while (left < right) {
        while (left < right && nums[right] >= base) {
            right--;
        }
        nums[left] = nums[right];
        
        while (left < right && nums[left] <= base) {
            left++;
        }
        nums[right] = nums[left];
    }
    nums[left] = base;

    quicksort(nums,start,left-1);
    quicksort(nums,left+1,end);
}`

标签:right,nums,基准值,元素,移除,指针,left
From: https://www.cnblogs.com/Blogwwww/p/18471013

相关文章

  • 如何把一个python列表(有很多个元素)变成一个excel表格的第一列?
    大家好,我是Python进阶者。一、前言前几天在Python最强王者群有个叫【麦当】的粉丝问了一个关于Python如何把一个python列表(有很多个元素)变成一个excel表格的第一列的问题,这里拿出来给大家分享下,一起学习。二、解决过程这里给出【dcpeng】和【德善堂小儿推拿-瑜亮老师】大佬......
  • yield 语句 - 提供下一个元素
    yield语句-提供下一个元素项目2024/10/153个参与者反馈本文内容迭代器的执行C#语言规范另请参阅在迭代器中使用 yield 语句提供下一个值或表示迭代结束。 yield 语句有以下两种形式:yieldreturn:在迭代中提供下一个值,如以下示例所示:C#复制 运行f......
  • 代码随想录算法训练营第一天|704二分查找、27移除元素、977有序数组的平方
    代码随想录算法训练营第一天|704二分查找、27移除元素、977有序数组的平方1Leetcode704二分查找题目链接:[704.二分查找](704.二分查找-力扣(LeetCode))文章链接:[代码随想录](代码随想录(programmercarl.com))视频链接:[手把手带你撕出正确的二分法|二分查找法|二分搜......
  • 第六章 元素应用CSS
    6.1使用CSS设置字体样式6.1.1.字体类型CSS提供font-family属性来控制文本的字体类型。格式如下:font-family:字体名称;参数:字体名称按优先顺序排列,以逗号隔开。如果字体名称包含空格,则应用引号括起。说明:用font-family属性可控制显示字体。不同的操作系统,其字体名是......
  • 3194. 最小元素和最大元素的最小平均值
    你有一个初始为空的浮点数数组averages。另给你一个包含n个整数的数组nums,其中n为偶数。你需要重复以下步骤n/2次:从nums中移除最小的元素minElement和最大的元素maxElement。将(minElement+maxElement)/2加入到averages中。返回averages中的最......
  • CSS伪元素详解
    CSS伪元素详解一、引言在CSS中,伪元素是一个非常强大的工具,它允许我们为元素的特定部分添加样式,而无需修改HTML结构。这不仅提高了样式的灵活性,还有助于保持代码的整洁和可维护性。本文将深入探讨CSS伪元素的使用方法和一些实用技巧。二、伪元素的基本概念1、伪元素的定......
  • Java 列表元素自定义排序
    在Java开发过程中,有时会遇到需要对列表中元素进行自定义的排序。这样的排序往往不能由元素本身的特性(比如字符串长度、首字母顺序)判断,需要自己指定顺序。比如对汉字的数字进行排序,他们的字符串长度都为1,首字母顺序也不能得到预期的结果,因此需要自定义排序。以下是示例代码:p......
  • java中如何在集合遍历过程中删除元素(5种方法对比、案例、常见的错误及其后果)
    在Java开发中,集合遍历过程中删除元素是一个常见但容易出错的操作。不同的集合类型(如ArrayList、HashSet)有不同的处理方式,而错误使用则可能导致ConcurrentModificationException异常。本文将全面分析该问题的根源,提供最佳实践、对比不同方法,并通过案例展示具体实现。一、问......
  • 将html元素保存为图片
    初始需求是echarts绘制的图表保存为图片,后来发现,echarts图标之外,还有一个参数input/button也要放到图片中于是,技术实现从简单的《echarts导出为图片》变成了较为复杂的《html元素导出为图片》 先放出已经实现的《echarts导出为图片》的代码,//导出图片generate......
  • 【VMware VCF】修复 SDDC Manager 中未能移除的网络池。
    当尝试在SDDCManager中删除未使用的网络池时,结果提示“未能移除网络池。已阻止删除网络池{0}。IP地址正在使用中”,我非常确定这个网络池没有被任何主机使用,因为这是为之前VI域主机所创建的网络池,而VI域现在已经被我删除了,但是在“已使用的IP”里却还显示有IP地址正在......