LeetCode No_80

这是一个删除数组当中冗余元素的题,这种类型的题第一反应应该就是双指针方法,一个指向实际扫描位置,另一个指向实际存储位置,直接上代码。

public static int removeDuplicates(int[]nums){
        int virtual_index=0;//虚拟位置,记录当前肯定没有重复的位置,其实从2开始也是可以的
        int actual_index=1;//实际扫描位置
        int frequency=1;//对当前数据进行频率记录,初始化为1
        if(nums.length<2){//当长度小于2时肯定不用去重
            return nums.length;
        }
        while(actual_index<nums.length){
            if(nums[actual_index]==nums[virtual_index]){

                if(frequency<2){//出现一次
                    if(actual_index+1!=virtual_index){//两个位置不连续,但是元素有多个,就需要使用当前处理元素去覆盖实际存储位置的后一个位置
                        nums[virtual_index+1]=nums[actual_index];
                    }
                    frequency++;
                    virtual_index++;
                }else {
                    frequency++;
                }
            }else {
                nums[virtual_index+1]=nums[actual_index];//对于新出现的元素只需要加在实际存储位置后方即可
                frequency=1;
                virtual_index++;
            }
            actual_index++;
        }
//        for(int i=0;i
//            System.out.println(nums[i]);
//        }
        return virtual_index+1;//从零开始存储,所以+1
    }

最近写的几道题都没有这么好的效果:
LeetCode No_80_第1张图片

你可能感兴趣的:(leetCode,刷题)