zoukankan      html  css  js  c++  java
  • LeetCode Array Easy 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 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.

    Clarification:

    Confused why the returned value is an integer but your answer is an array?

    Note that the input array is passed in by reference, which means modification to the input array will be known to the caller as well.

    Internally you can think of this:

    // nums is passed in by reference. (i.e., without making a copy)
    int len = removeElement(nums, val);
    
    // any modification to nums in your function would be known by the caller.
    // using the length returned by your function, it prints the first len elements.
    for (int i = 0; i < len; i++) {
        print(nums[i]);
    }

    我的解题思路:遍历整个数组,逐个检查每个值是否与要求移除的值相同,如果相同,则将后面的值依次向前移动一个位置,并从当前位置重新开始检查。

    遍历结束之后再检查最后一个位置的数是不是要求移除的值,如果是 返回值减1;

    看代码:

    public class Solution {
        public int RemoveElement(int[] nums, int val) {
            if(nums.Length == 0)
                return 0;
            int i,j,length=nums.Length;
            for(i = 0; i < length; i++){
                if(nums[i] == val){
                    for(j = i; j < length - 1; j++){
                        nums[j] = nums[j+1];
                    }
                    length--;
                    i--;//i递减1之后,从当前位置重新检查
                }
            }
            if(length !=0 && nums[length-1] == val)//检查最后一个数字是不是需要移除的值
                length--;
            return length;
        }
    }

  • 相关阅读:
    OC编程之道-创建对象之工厂方法
    OC编程之道-创建对象之单例模式
    OC编程之道-创建对象之原型模式
    OC编程之道-创建对象之生成器模式
    effective OC2.0 52阅读笔记(七 系统框架)
    effective OC2.0 52阅读笔记(六 块)+ Objective-C高级编程 (二 Blocks)
    effective OC2.0 52阅读笔记(五 内存管理)
    effective OC2.0 52阅读笔记(四 协议与分类)
    安装Sublime Text 3插件的方法
    cocos2d-x学习笔记
  • 原文地址:https://www.cnblogs.com/c-supreme/p/8884122.html
Copyright © 2011-2022 走看看