当前位置:   article > 正文

Leetcode面试经典150_Q27移除元素

Leetcode面试经典150_Q27移除元素

题目:给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。

不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组

元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。

核心思路:

双指针:右指针指向当前将要处理的元素,左指针指向下一个将要赋值的位置。

Python:

  1. class Solution(object): # 非官方题解
  2. def removeElement(self, nums, val):
  3. count = 0
  4. i = 0
  5. for j in range(len(nums)):
  6. if nums[i]==val:
  7. count=count+1
  8. if i != len(nums)-1:
  9. nums[i:len(nums)-1]=nums[i+1:]
  10. nums[-1]=val
  11. else:
  12. i=i+1
  13. return (len(nums)-count)

C++:

  1. class Solution {
  2. public:
  3. int removeElement(vector<int>& nums, int val) {
  4. int n = nums.size();
  5. int left = 0;
  6. for (int right = 0; right < n; right++) {
  7. if (nums[right] != val) {
  8. nums[left] = nums[right];
  9. left++;
  10. }
  11. }
  12. return left;
  13. }
  14. };
  1. class Solution { # optimized
  2. public: # 双指针分别位于首尾 重合时遍历完所有元素
  3. int removeElement(vector<int>& nums, int val) {
  4. int left = 0, right = nums.size();
  5. while (left < right) {
  6. if (nums[left] == val) {
  7. nums[left] = nums[right - 1];
  8. right--;
  9. } else {
  10. left++;
  11. }
  12. }
  13. return left;
  14. }
  15. };

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/380499
推荐阅读
相关标签
  

闽ICP备14008679号