Easy-题目28:27.Remove Element

题目原文:
Given an array and a value, remove all instances of that value in place and return the new length.
The order of elements can be changed. It doesn’t matter what you leave beyond the new length.
题目大意:
给一个数组,删除指定元素,并且返回剩下的数组长度。原数组的顺序可以改变。新长度以后的数据是无关紧要的。
题目分析:
使用Java STL中的ArrayList存储数组,遇到指定元素则跳过一次,再遍历ArrayList,把删除后的数组存回原数组,返回ArrayList的长度。
源码:(language:java)

public class Solution {
    public int removeElement(int[] nums, int val) {
        ArrayList<Integer> list=new ArrayList<Integer>();
        for(int i=0;i<nums.length;i++) {
            if(nums[i]!=val)
                list.add(nums[i]);
        }
        for(int i=0;i<list.size();i++)
            nums[i]=list.get(i);
        return list.size();
    }
}

成绩:
2ms,beats 0.74%,众数1ms,67.19%
cmershen的碎碎念:
这道题也得到了一个很差的成绩,原因是使用了开销比较大的STL,且重复了两次写数组。可以通过two pointer的思想改进一下,一个指针指向待存位置,一个指针指向正在扫描的位置,这样仅需一次读写数组。此外,该题的tag中提示了two pointer,以后在做题时tag的信息应予以注意,因为是很好的提示。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值