Leetcode No.27 Remove Element(c++实现)
2021-06-28 14:04
标签:hang placed ssi 遍历 找不到 复杂度 pointer 针对 his Given an integer array nums and an integer val, remove all occurrences of val in nums in-place. The relative order of the elements may be changed. Since it is impossible to change the length of the array in some languages, you must instead have the result be placed in the first part of the array nums. More formally, if there are k elements after removing the duplicates, then the first k elements of nums should hold the final result. It does not matter what you leave beyond the first k elements. Return k after placing the final result in the first k slots of nums. Do not allocate extra space for another array. You must do this by modifying the input array in-place with O(1) extra memory. 给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。 不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。 元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。 IDE:VS2019 此程序参考:https://www.cnblogs.com/lightwindy/p/8628297.html 快慢指针对于这种O(1)空间复杂度的数组问题真的很好用,虽然菜鸡的我还没有掌握它的灵魂,废话不多说。这个方法用的快慢指针法,也叫双指针法。res作为慢指针,始终指向的是去重后的数组元素,而i作为快指针,一马当先,遍历整个数组。如果快指针指向的元素不是目标元素,也就是去重元素,就让慢指针+1,同时指向该元素。i遍历一遍,算法结束。 菜鸡的我只想到暴力算法,遍历整个数组,遇到去重元素,就删除该元素。遍历完后,返回去重后数组长度即可。 关于快慢指针,Leetcode的26题也用到了该算法,这个算法真不错,26题的该算法解法可以参考:https://www.cnblogs.com/yunmeng-shi/p/14927735.html Leetcode No.27 Remove Element(c++实现) 标签:hang placed ssi 遍历 找不到 复杂度 pointer 针对 his 原文地址:https://www.cnblogs.com/yunmeng-shi/p/14930945.html1. 题目
1.1 英文题目
1.2 中文题目
1.3输入输出
输入
输出
nums = [3,2,2,3], val = 3
2, nums = [2,2,,]
nums = [0,1,2,2,3,0,4,2], val = 2
5, nums = [0,1,4,0,3,,,_]
2. 实验平台
IDE版本:16.10.1
语言:c++113. 程序
3.1 测试程序
#include "Solution.h"
#include
3.2 功能程序
3.2.1 最佳程序
(1)代码
#pragma once
#include
(2)解读
解读参考:https://www.cnblogs.com/forPrometheus-jun/p/10889152.html3.2.2 自写程序
(1)代码
#pragma once
#include
(2)思路
从前往后遍历,如果发现有元素重复,则将重复元素剔除4. 相关知识
(1) 快慢指针(Fast-Slow Pointer)
下一篇:个人项目:WC(Java 实现)
文章标题:Leetcode No.27 Remove Element(c++实现)
文章链接:http://soscw.com/essay/98920.html