题目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...)
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。