leetcode刷题 数组

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sinat_33641359/article/details/80504893

        要是能像一月份说的每天一道现在已经刷了一百多道了,唉,懒惰。

        话不多说,这次写leetcode数组问题

        283Move Zeroes这道题很简单,思路就是遇到零跳过,不是零就拿出来覆盖掉是零的数,然后后面再不上所有的零

class Solution {
    public void moveZeroes(int[] nums) {
        int NoZeroIndex = 0  ;
        for(int i = 0 ; i < nums.length   ; i ++){
            if(nums[i] != 0){
                nums[NoZeroIndex] = nums[i] ;
                NoZeroIndex++ ;
            }
        }
        for(int i = NoZeroIndex ; i < nums.length  ; i ++){
            nums[i] = 0 ;
        }  
    }
}

27Remove Element这道题和上面差不多,遇到重复的就跳过

class Solution {
    public int removeElement(int[] nums, int val) {
        int NoEqualValIndex = 0 ;
        for(int i = 0 ; i < nums.length ; i ++){
            if(nums[i] != val){
                nums[NoEqualValIndex++] = nums[i] ;
            }
        }
        return NoEqualValIndex ;
    }
}

26Remove Duplicates from Sorted Array还是差不多相等就跳过不相等就继续

class Solution {
    public int removeDuplicates(int[] nums) {
        if(nums == null || nums.length == 0){
            return 0 ;
        }
        
        int a = 0 ;
        for(int i = 0 ; i < nums.length ; i ++){
            if(nums[a] != nums[i]){
                a ++ ;
                nums[a] = nums[i];
            }
        }
//         要返回的是个数 a只是下标所以要加一
        return a + 1 ;
        

80Remove Duplicates from Sorted Array II这道题看着很简单还是有一些小技巧的,比如遍历的时候从一开始就可以直接看第二个相等的地方,如果从零开始就会导致count大于二时无法重置的等等问题,还是耗费了我一些时间才解决

class Solution {
    public int removeDuplicates(int[] nums) {
        if(nums == null || nums.length < 1){
            return 0 ;
        }
// 这个相当于双指针,一个指针比遍历的指针慢一步
        int a = 0 ;
        int count = 1 ;
//         这就是为什么要从一开始,遍历的指针比记号的指针快一步
        for(int i = 1 ; i < nums.length ; i ++){
//             如果这里相等因为a和i差一位表明前一位和后一位相等了,已经有两次相等了
            if(nums[a] == nums[i]){
//                 所以这里是小于等于二能进来表明已经有两次相等了
                if(count < 2){
                    nums[++a] = nums[i] ;
                    count ++ ;
                }
            }else{
                nums[++a] = nums[i];
//                 这里要重置count
                count = 1 ;
            }
        }
//         加一是因为a是下标 , 比数组大小一个
        return a + 1 ;
    }
}


8

猜你喜欢

转载自blog.csdn.net/sinat_33641359/article/details/80504893