LeetCode_03:Remove Element

【信息科学与工程学】【数据科学】数据科学领域 第六篇 算法设计 07 堆、栈、表、矩阵、集合、队列、数组、字符串、树、图、动态规划、结构体、元组的算法01 当前段必须包含所有字符的最后出现位置。1. 字符串分割成最多片段2. 基因序列功能域划分3. 文本段落划分4. 音频声道分离5. 图像色彩分区6. 社交网络社群划分7. 蛋白质结构域8. 音乐乐章分段9. 代码模块划分10. 章节划分特征:一次扫描,贪心确定边界。 阅读详情
1、总结:

上一题开心完今天就跪了,算法虽然也解决问题,但是不知道为什么空间复杂度居高不下。

2、题目:

Given an array nums and a value val, remove all instances of that value in-place and return the new length.
Do not allocate extra space for another array, you must do this by modifying the input array in-place with O(1) extra memory.
The order of elements can be changed. It doesn’t matter what you leave beyond the new length.

Example 1:

Given nums = [3,2,2,3], val = 3,
Your function should return length = 2, with the first two elements of nums being 2.
It doesn't matter what you leave beyond the returned length.

Example 2:

Given nums = [0,1,2,2,3,0,4,2], val = 2,
Your function should return length = 5, with the first five elements of nums containing 0, 1, 3, 0, and 4.
Note that the order of those five elements can be arbitrary.
It doesn't matter what values are set beyond the returned length.
3、我的解决方法:

解题思路依旧延续上一题:

// 方法一:
var removeElement = function(nums, val) {
    let len = 0;
    for(let i = 0; i < nums.length; i++) {
        if(nums[i] != val) {
            if(i > len) {
                nums[len] = nums[i]
            }            
            len++;
        }
    }
    return len;
};

在这里插入图片描述
经观察发现,如果不判断 i > len 这个方法依旧有效,只是少了判断,多了元素的左向移动,提交后发现速度的确小小的提升,不确定是因为元素copy的花销大于判断的花销,还是由于随机因素(网络环境等);

// 方法二:
var removeElement = function(nums, val) {
    let len = 0;
    for(let i = 0; i < nums.length; i++) {
        if(nums[i] != val) {
            if(i > len) {
                nums[len] = nums[i]
            }            
            len++;
        }
    }
    return len;
};

在这里插入图片描述

4、solution:

看过solution之后,又get了一种解法,就是当需要丢弃的元素很少时,上面的代码需要copy大量有效元素,例如[4, 3, 2, 1, 5, 6]
val 是 4 时,需要将[3, 2, 1, 5, 6]全部左移,这属于不必要的开销。于是,又产生了另一种解法:将需要丢弃的元素与数组的最后一位交换,同时数组长度减1,再从第i位重新检索。

// 方法三:
// when elements to remove are rare
var removeElement = function(nums, val) {
    let i = 0;
    let n = nums.length;
    while(i < n) {
        if(nums[i] == val) {
            nums[i] = nums[n-1];
            n--;
        } else {
            i++;
        }
    }    
    return n;
};

本以为这种方法会节约时间,但奇怪的是执行时间反而提升了:
在这里插入图片描述
因此 执行时间增长的原因待详查,这里依然记录这种解法以拓展解题思路。

5、其他人的解法:

大概看了一下,用到splice居多,差别就是正向遍历与反向遍历。
正向遍历时需要注意,splice移除元素之后,下次遍历需要再次遍历当前位置的元素,而不是向前一步。

// 方法五:
// 正向移除
var removeElement = function(nums, val) {
    for(let i=0; i < nums.length; i++) {
        if(nums[i] === val) {
            nums.splice(i, 1); 
            i = i-1;
        }
    }
   return nums.length;
};


// 方法四:
// 反向移除
var removeElement = function(nums, val) {
    for (let i = nums.length - 1; i >= 0; i--){
        if (nums[i] == val){
            nums.splice(i, 1);
        }
    }
    return nums.length;
};

效率如下,感觉相差不大:
在这里插入图片描述

重构工业交互体验:响应式数据可视化大屏解决方案 从智慧园区到数据中心,从水务监控到风力发电场景,HT 通过 2D/3D 组态技术与响应式布局机制,让数据以更灵活、更精准的方式呈现场景动态 —— 这正是 HT 技术在工业可视化领域的核心价值。例如,在智慧楼宇监控系统中,HT 引擎可实时渲染建筑结构、设备状态与数据流,同时确保画面在不同尺寸屏幕上的一致性。以某工业数据中心大屏为例,HT 通过暗红色主调搭配工业元素,结合粉色与黄色点缀,打破传统深蓝色大屏的视觉定式,同时通过矢量图形确保色彩在不同亮度下的辨识度 —— 这正是 HT 技术在视觉设计上的独特优势。 阅读详情

相关推荐

4、设备树的处理(1)

其实到第4节才写设备树的问题完全是因为忘记了,之前有一个版本是先关闭了设备树的,习惯性的认为设备树已经处理完了,失误了!!!前文说过,这个系统是依着荣品的开发板和核心板来的,使用的是5.1内核的SDK。它的SDK里是开发板全功能的,所以设备树也是的。

wsen2012的博客 417

Leetcode Remove Element Python 用变量名删除数组中的相同元素,python的优势。

Leetcode 27题 Remove Element Given an array nums and a value val, remove all instances of that value in-place and return the new length. Do not allocate extra space for another array, you must do this ...

润泽的博客 230

别再花屏了!手把手教你用STM32CubeIDE搞定LVGL 8.3移植(附完整源码)

本文详细介绍了如何在STM32CubeIDE环境下成功移植LVGL 8.3,解决常见的花屏问题。从环境配置、显示驱动优化到编译警告处理,提供完整的实战方案和源码示例,帮助开发者快速实现流畅的嵌入式GUI界面。特别针对STM32平台的DMA2D加速和内存管理进行了深度优化。

weixin_33739646的博客 243

【算法】LeetCode算法题-Remove Element

这是悦乐书的第150次更新,第152篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第9题(顺位题号是27)。给定整数数组nums和值val,删除nums中所有的val值,元素顺序可以改变,返回删除val值后数组的长度。不能使用新数组接收数据。例如: 给定数组nums = {3,2,2,3}, val = 3 你的函数应返回length = 2 其中nums的前两个元...

小川的博客 200

Depth Anything 3实战:如何用DINOv2 Transformer一键生成3D高斯点云?

本文详细介绍了Depth Anything 3(DA3)模型如何利用DINOv2 Transformer架构,实现从单张或多视角图像一键生成高质量3D高斯点云。DA3通过统一的深度-射线表示和自适应注意力机制,简化了传统复杂的3D重建流程,并可直接微调用于3D高斯渲染,为图形学、CV和内容创作领域提供了高效的端到端解决方案。

postgres8guard的博客 722

【基于CKF的IMM】CV和CT两个模型下的IMM,二维,滤波使用CKF(容积卡尔曼滤波),附完整的matlab代码

该文章摘要: 本文提出了一种基于交互多模型(IMM)和容积卡尔曼滤波(CKF)的融合定位算法,用于解决目标在直线运动和转弯机动之间的模型切换问题。通过MATLAB仿真实现了IMM-CKF算法,并与单一的CV-CKF(匀速模型)和CT-CKF(匀角速转弯模型)方法进行对比。实验结果表明,在包含直线段和转弯段的复合轨迹跟踪中,IMM-CKF方法能够自适应调整模型权重,显著提高了定位精度。轨迹跟踪图、位置/速度误差对比图以及模型概率曲线直观展示了IMM算法的优势。文章提供了完整的MATLAB实现代码,可用于目标跟

985工科博士毕业,专攻定位、导航和滤波等算法研究。从业10年,主要使用MATLAB 615

LeetCode C++ 27. Remove Element【Array/Two Pointers】【快慢指针】

Given an array nums and a value val, remove all instances of that value in-place and return the new length. Do not allocate extra space for another array, you must do this by modifying the input array...

memcpy0的博客 519

YOLOv11原创改进专栏|原创自研篇|DAA模块手把手添加教程

个人简介:大家好!我是 DAA 注意力机制,堪称深度学习中的“聚光灯”。我的任务是帮助模型聪明地识别关键特征,就像一位经验丰富的侦探,能够在繁杂的数据中找到重要线索。通过结合通道和空间的注意力,我能确保模型把重点放在最有价值的信息上,从而提升识别准确率。简单来说,我就是帮助你的模型变得更加专注、敏锐,让它在一堆数据中轻松找到“宝藏”,为检测精度加分!动态适应性特征提取DAA通过动态生成卷积核来适应输入特征的变化,从而实现针对不同数据的自适应特征提取。

mywhyyds的博客 379

【力扣】刷题总结

四:总的策略合起来最大(遍历判断要定位的为第i点)

weixin_43843390的博客 831

为什么devc++编译项目会失败?提示gcc无法正常启动...

根据你的描述,编译能正常进行时,只打开源文件并没有问题,问题主要出现在创建项目后编译失败,这通常与 Makefile 配置、环境变量、编译器路径设置等因素有关。你可以检查 Makefile 配置,验证 DevC++ 的编译器环境设置,或者尝试清理并重新配置项目。如果问题仍然存在,可以尝试重装 DevC++ 或重新配置工具链。希望如上措施及解决方案能够帮到有需要的你。

**My Coding Family** 1376

YOLOv12创新改进 | 全网独家创新篇、小目标检测改进 | AAAI 2025 | 引入HS-FPN中的HFP和SDP创新点,从频域增强小目标特征,淘汰FPN进行升级,助力YOLOv12有效涨点

本文提出了HS-FPN(高频和空间感知特征金字塔网络),通过HFP(高频感知)模块增强小目标特征,SDP(空间依赖感知)模块捕获像素间空间依赖关系。实验在AI-TOD等小目标数据集上验证了该方法的有效性,相比FPN显著提升检测性能。文章详细介绍了HS-FPN的网络结构、核心代码实现及在YOLOv12中的应用方法,并提供多种改进版本的yaml配置文件,为小目标检测任务提供了有效的解决方案。

Ai缝合怪、助力小伙伴高效发论文 338

【leetcode】高频题目整理_数组篇( High Frequency Problems, Array )

截止至今LeetCode题目总量已经有1582题,估计将来每年平均增长300题左右,大部分人肯定是刷不完的,所以得有选择地刷LeetCode。 一种公认的刷题策略是按类别刷题,可是每个类别也有许多题,在有限的时间里到底该刷哪些题呢?个人根据LeetCode官方给出的每个题目的出现频率,整理并收录了每个类别里高频出现的题目,对于官方统计频率太低的题目,不予收录,最终得到了这个高频题目表格。 例如,对于下图中题号#275与#270的题目将被收录,并且#275出现频率大于#270;而对于题号#1011与#1.

嵌入式与Linux那些事的博客 2798

11-16 Fluent结果查看及后处理功能(做动画、监控点)

监控点、面及动画操作

zheaa的博客 1万+

我的前端学习路线之JavaScript

因为之前的工作性质类似于全栈开发,接触到不少的前端知识,于是感觉前端写起来更有意思和成就感。在年前的时候有这么一次机会就从后台开发正式转为前端了,之后也陆陆续续进行了一些学习,但是进展缓慢。后面自己总结了一下原因:一是我喜欢刷书,从前往后整本整本的看,现在觉得有点捱板;二是我没有一个明确的目标,想看js就看js,看烦了就刷css。所以在这里给自己列了一个学习路线,给自己立一个flag。 我的问题

laurel_y的博客 1339

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

JavaScript:对象可枚举和不可枚举属性

在JavaScript中,对象的属性分为可枚举和不可枚举之分,它们是由属性的enumerable值决定的。可枚举性决定了这个属性能否被for…in查找遍历到。 一、怎么判断属性是否可枚举 js中基本包装类型的原型属性是不可枚举的,如Object, Array, Number等,如果你写出这样的代码遍历其中的属性: var num = new Number(); for(var pro in num) { console.log("num." + pro + " = " + num[pro]); }

laurel_y的博客 1120

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

LeetCode_11:Best Time to Buy and Sell Stock II

1、总结: 1、看solution2(解法三)中对while的灵活使用,使得代码一气呵成。我虽然明白这道题用波峰波谷的想法去破题,但是实现的却很粗糙,有一种武功招式没有跟上内功心法的赶脚(中二????) 2、切记:学习算法根本目的是为了解决实际问题,所以锻炼思维很重要,实现方式也很重要! 3、当我看到solution2的时候,我还在感慨代码实现的干净;当我看到solution3的时候又真实感受到了思维...

laurel_y的博客 272

LeetCode_23:Fibonacci Number

1、总结 2、题目 The Fibonacci numbers, commonly denoted F(n) form a sequence, called the Fibonacci sequence, such that each number is the sum of the two preceding ones, starting from 0 and 1. That is, F(0)...

laurel_y的博客 240

LeetCode_24:K-diff Pairs in an Array

这两天看redux,脑子有点绕,于是回来接着刷算法换换脑子… 1、总结 2、题目 Given an array of integers and an integer k, you need to find the number of unique k-diff pairs in the array. Here a k-diff pair is defined as an integer pa...

laurel_y的博客 239

LeetCode_21:Find All Numbers Disappeared in an Array

1、总结 当元素需要标记,又不想创建额外变量的时候,取反是一种方法;元素交换/移动也是一种方法; 方法四,通过累加n标记元素,在原来的逻辑上绕了一点,这种操作需要消化一下; 2、题目 Given an array of integers where 1 ≤ a[i] ≤ n (n = size of array), some elements appear twice and others a...

laurel_y的博客 222

LeetCode_17:Shortest Word Distance Easy

1、总结 留意方法三相对于方法一的优化! 隐约有一个总结,待验证:对于数组求最小最大值的操作,尽量优化为单向遍历(或双向遍历/反向遍历…),用于过渡的变量尽可能少(1个或更少); 这道题由于没有subscribe,因此只能自己写一写,没有详细的性能测试结果; 2、题目 Given a list of words and two words word1 and word2, return the...

laurel_y的博客 214

LeetCode_04:Search Insert Position

1、总结: 感觉自己每次想出一种解法,就很难再有别的解决方案了,知识储备还是太少; 对于时间复杂度和空间复杂度的计算还是不敏感,没有准确的概念。尤其是想要优化代码空间复杂度的时候,感觉无从下手,基本全靠学习他人的解决方法。 2、题目: Given a sorted array and a target value, return the index if the target is found...

laurel_y的博客 195

LeetCode_20:Third Maximum Number

1、总结 2、题目 Given a non-empty array of integers, return the third maximum number in this array. If it does not exist, return the maximum number. The time complexity must be in O(n). Example 1: Input...

laurel_y的博客 193

LeetCode_14:Rotate Array

1、总结 我还是有偷懒的概念的,每次实现暴力破解法都跟挤牙膏似的; 题目中说至少有三种解决办法,我只写了JavaScript函数和暴力破解法,我记得线性代数中还有关于矩阵的运算方法,但是具体实现已经还给老师了。 数组元素移动K位后的index计算公式:(i+k) % nums.length do {...} while () 语法 2、题目 Given an array, rotate the...

laurel_y的博客 192

LeetCode_09:Pascal's Triangle II

1、总结 下次还是先实现基础方法,再研究优化问题,这一道题由于我想总结出计算公式,卡了好久… 我感觉还是可以推断出计算公式的,只是现在刷题为重,先过… 2、题目 Given a non-negative index k where k ≤ 33, return the kth index row of the Pascal’s triangle. Note that the row index...

laurel_y的博客 190

LeetCode_22:Max Consecutive Ones

1、总结 2、题目 Given a binary array, find the maximum number of consecutive 1s in this array. Example 1: Input: [1,1,0,1,1,1] Output: 3 Explanation: The first two digits or the last three digits are ...

laurel_y的博客 189
上一篇: LeetCode_02:Remove Duplicates from Sorted Array
下一篇: LeetCode_04:Search Insert Position
violet_Y_y
博客等级 码龄12年 6粉丝 42原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值