题目1:

给定一个有序数组,在不使用额外数组空间的情况下,如何返回去重后的数组长度。例如:输入 [1,1,2,3,4,5,6,6] ,输出:6
题目链接:https://leetcode-cn.com/leetb...

解题思路:

    由于本身给定切片或者数组是有序的,设置 left 和 right 两个指针,left 从 0 开始,right 从 1 开始,然后使用 right 遍历切片,如果下标为左的元素不等于下标为右的元素,那么就将 left 向前推一位,然后将元素 right 位置的元素赋值给 left 位置的元素。最终返回 0 到 left+1 位置的元素即可。

代码

php

function test(&$arr):int {
    $len = count($arr);

    if (count($arr) < 1) {
        return 0;
    }

    $left = $arr[0];
    for ($right = 1; $right < $len; $right++) {
        if ($arr[$left] != $arr[$right]) {
            $left++;
            $arr[$left] = $arr[$right];
        }
    }

    var_dump(array_slice($arr, 0, $left+1));

    return count(array_slice($arr, 0, $left+1));
}

go

func unset(nums []int) int {
    if len(nums) < 1 {
        return 0
    }

    left := 0
    for right:=1; right < len(nums); right++ {
        if nums[left] != nums[right] {
            left++
            nums[left] = nums[right]
        }
    }

    return len(nums[:left+1])
}

题目2:

给定一个整数数组,返回右数组中所有元素组成的整数加 1 后的结果,结果为一个数组,例如:输入[9],输出[1,0];输入[1,2,3],输出[1,2,4]

解题思路:

从后向前遍历数组元素,对于每一位元素,,如果值为 9,则将这一位变成 0,否则给这一位数字加1后返回数组。当数组中元素都为 9 时,此时原数组中每一位数字就变成了 0,此时需要在数组前加一位,值为 1

代码:

php

function test($arr):array {
    $len = count($arr);

    if ($len == 0) {
        return [];
    }

    for ($i = $len-1;$i >= 0; $i--) {
        if ($arr[$i] == 9) {
            $arr[$i] = 0;
        } else {
            $arr[$i] += 1;
            return $arr;
        }
    }

    //仅当数组中元素全部为 9 时才会走到这里
    $arr[0] = 1;
    $arr[] = 0;

    return $arr;
}

go

func plusOne(a []int) []int {
    lens := len(a)
    if lens == 0 {
        return []int{}
    }

    for i := lens-1; i >= 0; i-- {
        if a[i] != 9 {
            a[i] += 1
            return a
        } else {
            a[i] = 0
        }
    }

    //新建切片,只有一个元素 1,然后将原值都为 0 的切片追加到其后
    return append([]int{1}, a...)
}

echo_return
235 声望2 粉丝

好好学习,加油


« 上一篇
PHP面试题
下一篇 »
leetcode-Day2