27. 移除元素

原创 2018年04月16日 17:02:35

一、题意
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.

二、分析和解答

 public int removeElement(int[] nums, int val) {
        if(nums.length == 0)
            return 0;
        int p = 0,q = 0;
        int num = 0;
        while(p<nums.length && q<nums.length){
            while(p < nums.length && nums[p] != val){         
                p++;
            }
            q = p;
            while(q < nums.length && nums[q] == val){
                q++;
            }

            if(p < nums.length && q < nums.length){
                nums[p] = nums[p] ^ nums[q];
                nums[q] = nums[p] ^ nums[q];
                nums[p] = nums[p] ^ nums[q];    
            }
            p++;
        }

        for(int i=nums.length-1;i>=0 && nums[i]==val;i--){
            num++;
        }
        return nums.length - num;
    }

注意:
(1)while(p < nums.length && nums[p] != val){ p++; }
中,一定要有p < nums.length这个判断。因为里面是p++,最后一次导致p的数为nums.length,而且此时也能进入while的判断,数组越界!
(2)原地变换,使用的是异或操作!
(3)使用快慢指针,慢指针指向等于val的值,快指针等于这个值后面的不等于val的值!

别人的方法:

    public int removeElement(int[] nums, int val) {
        if(nums.length == 0)
            return 0;
        int count = 0;
        for(int i=0;i<nums.length;i++){
            if(nums[i] != val)
                nums[count++] = nums[i];
        }
        return count;
    }

虽然别人的看着简单,貌似我的要比它的快点!也不一定,可能那时候服务器压力小。

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xuchonghao/article/details/79963143

【吴刚】网页元素设计WUI零基础入门视频教程

本套教程循序渐进,深入浅出,全篇干货,系统化的通过网页元素、网页元素的应用、网页元素的用户交互使用规范,以及相关的技术实现方法等各方面内容。
  • 2018年03月23日 12:52

Leetcode #27. Remove Element 移除元素 解题报告

1 解题思想原题不就是说,给定数组,和一个目标值。。把数组里等于目标值的给删了么,最后还剩几个。。这道题虽然只说有几个。。但是似乎还是要交换的,不只是单纯的统计。。检查的时候会遍历检查的2 原题原题 ...
  • MebiuW
  • MebiuW
  • 2016-03-29 23:25:15
  • 763

LeetCode 27 Remove Element(移除元素)

翻译这里写代码片原文Given an array and a value, remove all instances of that value in place and return the new...
  • NoMasp
  • NoMasp
  • 2015-11-13 23:25:35
  • 3739

leetCode 27.Remove Element (删除元素) 解题思路和方法

Remove Element  Given an array and a value, remove all instances of that value in place and ret...
  • xygy8860
  • xygy8860
  • 2015-07-07 20:32:52
  • 814

Java - 计蒜客 - 元素移除

给定一个数组和一个数(该数不一定在数组中),从数组里删掉这个数字,返回剩下的数组长度。 如:A[] = {1, 2, 3, 4, 5}, 要删除数字3, 那么返回数组长度为4. ...
  • qq_34594236
  • qq_34594236
  • 2016-06-02 22:37:20
  • 387

LeetCode 27.移除元素

给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。...
  • lyj2698
  • lyj2698
  • 2018-04-17 20:28:37
  • 20

LeetCode 27. 移除元素

27. 移除元素 题目 给定一个数组 nums&amp;nbsp;和一个值 val,你需要原地移除所有数值等于&amp;nbsp;val&amp;nbsp;的元素,返回移除后数组的新长度。 ...
  • huan_chen
  • huan_chen
  • 2018-04-24 15:21:47
  • 2

leetcode 27. 移除元素

给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。...
  • u011750466
  • u011750466
  • 2018-04-19 20:08:36
  • 10

LeetCode 27. 移除元素

题目描述: 移除元素        给定一个数组和一个值,在这个数组中原地移除指定值和返回移除后新的数组长度。        不要为其他数组分配额外空间,你必须使用 O(1) 的额外内存原地修改这个输...
  • qq_33168253
  • qq_33168253
  • 2018-03-30 00:41:01
  • 31

Leetcode 27. 移除元素

简单题class Solution { public: int removeElement(vector& nums, int val) { int ans = -1; ...
  • Bendaai
  • Bendaai
  • 2018-04-21 09:17:51
  • 3
收藏助手
不良信息举报
您举报文章:27. 移除元素
举报原因:
原因补充:

(最多只允许输入30个字)