LeetCode027-Remove Element

Remove Element

Question:

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.

Example1:

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.

Example2:

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 = removeDuplicates(nums);

// 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]);
}

解法代码

import java.util.Arrays;

public class LeetCode27 {

    public static void main(String[] args) {
        int[] nums = new int[]{3,2,2,3};
        int val = 2;
        System.out.println("length : " + new LeetCode27().removeElement(nums, val));
        System.out.println("Array string : " + Arrays.toString(nums));
        nums = new int[]{0,1,2,2,3,0,4,2};
        val = 2;
        System.out.println("length : " + new LeetCode27().removeElement(nums, val));
        System.out.println("Array string : " + Arrays.toString(nums));
    }
    
    public int removeElement(int[] nums, int val) {
        // 空数组直接返回
        if(nums == null || nums.length == 0) {
            return 0;
        }
        // 结果数组长度
        int i = 0;
        for(int num : nums) {
            if(num == val) {
                continue;
            }
            nums[i] = num;
            i++;
        }
        return i;
    }
}

Output:

length : 2
Array string : [2, 2, 2, 3]
length : 5
Array string : [0, 1, 3, 0, 4, 0, 4, 2]

Time And Space Complexity

Time: O(n) 需要一次循环遍历
Space:O(1) 不需要使用额外的存储空间

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • rljs by sennchi Timeline of History Part One The Cognitiv...
    sennchi阅读 12,141评论 0 10
  • pyspark.sql模块 模块上下文 Spark SQL和DataFrames的重要类: pyspark.sql...
    mpro阅读 13,143评论 0 13
  • 夏雨万壑凑,沣涨暮浑浑。 草木盈川谷,澶漫一平谷。 1 短短两周时间,第三个台风再次逼近广东地区,前两个带来的破坏...
    沐森读书阅读 1,495评论 0 0
  • 招聘: 《知识分子》是由饶毅、鲁白、谢宇三位学者创办的移动新媒体平台,自2015年9月18日正式亮相至今,微信订阅...
    知识分子阅读 3,940评论 1 12
  • 冬天的早晨,简直寒冷得“恐怖”。 周末一大早,街上人少得很,似乎全世界只剩下我一个人了。太阳也懒得不肯起来,搞得天...
    杨馨媛阅读 1,755评论 0 0