📃数组
2022-5-20
| 2023-5-15
0  |  阅读时长 0 分钟
type
status
password
date
slug
summary
category
URL
tags
icon

26. 删除有序数组中的重复项 - 力扣(LeetCode)

给你一个有序数组 nums,请你 原地 删除重复出现的元素,使每个元素最多出现一次 ,返回删除后数组的新长度。

80. 删除有序数组中的重复项 II - 力扣(LeetCode)

给你一个有序数组 nums,请你 原地 删除重复出现的元素,使每个元素最多出现两次 ,返回删除后数组的新长度。

283. 移动零 - 力扣(LeetCode)

给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
左指针指向当前已经处理好的序列的尾部,右指针指向待处理序列的头部。
右指针不断向右移动,每次右指针指向非零数,则将左右指针对应的数交换,同时左指针右移。注意到以下性质:
  • 左指针左边均为非零数;
  • 右指针左边直到左指针处均为零。
因此每次交换,都是将左指针的零与右指针的非零数交换,且非零数的相对顺序并未改变。
解法一
解法二

344. 反转字符串 - 力扣(LeetCode)

编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。

557. 反转字符串中的单词 III - 力扣(LeetCode)

给定一个字符串 s ,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。

1.旋转数组(189 - 中)

题目描述

给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。进阶:
  • 尽可能想出更多的解决方案,至少有三种不同的方法可以解决这个问题。
  • 你可以使用空间复杂度为 O(1) 的 原地 算法解决这个问题吗?
示例 :

模拟循环

用一个变量tmp维护移动k次,注意移动数组时倒序进行填充,防止覆盖,时间复杂度O(kn),但是超时。空间复杂度O(1)
java
python

使用额外数组

遍历原数组,将原数组下标为 i 的元素放至新数组下标为 (i+k)%n 的位置,最后将新数组拷贝至原数组即可。空间复杂度O(N)
java
python3

数组翻转(想不到,所以记住)

操作结果
原始数组
原始数组
1 2 3 4 5 6 7
翻转所有元素
7 6 5 4 3 2 1
翻转 [0,k mod n−1] 区间的元素
5 6 7 4 3 2 1
翻转 [k mod n,n−1] 区间的元素
5 6 7 1 2 3 4
  • 比较巧妙,先整体翻转,在将0 ~ k - 1和k - 1 ~ n - 1进行翻转。空间复杂度O(1)
代码实现:

2.寻找旋转排序数组中的最小值(153 - 中)

3.寻找旋转排序数组中的最小值II(154 - 难)

4.搜索旋转排序数组(33 - 中)

5.搜索旋转排序数组II(81 - 中)

8.山脉数组的峰顶索引(852 - 易)

9.山脉数组中查找目标值(1095 - 难)

10.两数相除(29 - 中)

 
  • 线性表
  • 链表问题集锦
    Loading...
    目录