27. 移除元素 Remove Element

2020-11-07  本文已影响0人  滨岩

27. 移除元素 Remove Element

https://leetcode-cn.com/problems/remove-element/

给定一个数组nums和一个数值val,将数组中所有等于val的元素删除,并返回剩余的元素个数。
-如何定义删除?从数组中去除?还是放在数组末尾?
-剩余元素的排列是否要保证原有的相对顺序?
-是否有空间复杂度的要求?O(1)

解决方法类似 283. 移动零 MoveZeros


    //时间复杂度O(n)
    //空间复杂度O(1)
    public int removeElement(int[] nums, int val) {
        int  noValIndex=0;

        //遍历到第i个元素,保证[0..i]中的所有非val 元素
        // 都顺序的排列在[0..noValIndex)后
        //同时保证[noValIndex,i)均是val 元素
        for(int i=0;i<nums.length;i++){
            if(nums[i]==val){
                continue;
            }

            //每个元素都不相等 就不用切换
            if(noValIndex!=i){
                swap(nums,i,noValIndex);
            }
            noValIndex++;
        }

        return noValIndex;
    }




    private void swap(int[] nums,int source,int target){
        int temp=nums[source];
        nums[source]=nums[target];
        nums[target]=temp;
    }

上一篇下一篇

猜你喜欢

热点阅读