Skip to content

Commit 16134c6

Browse files
committed
revise sth
1 parent 7cb26d2 commit 16134c6

File tree

3 files changed

+34
-15
lines changed

3 files changed

+34
-15
lines changed

Array/array.md

Lines changed: 30 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
1-
### 数组
2-
#### 什么是数组
1+
## 数组
32

4-
  我们知道常用的数据存储方式有两种:顺序存储和非顺序存储。顺序存储就是把数据存储在一块连续的空间内。数组(array)就是典型的顺序存储,而链表就是典型的非顺序存储。
3+
### 什么是数组
54

6-
  数组通常用于存储一系列相同类型的数据。当我们在创建数组时,会在内存中划分出一块连续的内存用于存储数据,插入数据时,会将数据按顺序存储在这块连续的内存中,读取时通过访问数组的索引迅速取出。数组名就是一个指针,指向这段内存的起始地址。通过数组的类型,编译器知道在访问下一个元素的时候需要在内存中后移多少个字节。由于数组在存储时是顺序存储的,存储数据的内存也是连续的,所以数组在读取数据时比较容易,随机访问速度快,但是插入和删除就比较费劲了。读取可以直接根据索引,插入和删除则比较耗时,插一个数据需要移动大量元素,在内存中空出一个元素的空间,然后将要增加的元素放在其中,如果想删除一个元素,同样需要移动大量元素去掉被移动的元素。所以如果需求是快速访问数据,很少或者几乎不插入和删除元素,数组是一个不错的选择
5+
​ 我们知道常用的数据存储方式有两种:顺序存储和非顺序存储。顺序存储就是把数据存储在一块连续的空间内。数组(array)就是典型的顺序存储,而链表就是典型的非顺序存储
76

8-
  最常见的有一维数组和二维数组,稍微复杂一点的是多维数组和动态数组。在c++中,STL提供了Vector,在Java中,Collection集合中提供了ArrayList和Vector,对于Python而言,内置的List就是一个动态指针数组。当列表中没有空间存储新的元素时,列表会动态地改变大小以容纳新的元素,每次改变大小时,会预留一部分空间以降低改变大小的频率
7+
​ 数组通常用于存储一系列相同类型的数据。当我们在创建数组时,会在内存中划分出一块连续的内存用于存储数据,插入数据时,会将数据按顺序存储在这块连续的内存中,读取时通过访问数组的索引迅速取出。数组名就是一个指针,指向这段内存的起始地址。通过数组的类型,编译器知道在访问下一个元素的时候需要在内存中后移多少个字节。由于数组在存储时是顺序存储的,存储数据的内存也是连续的,所以数组在读取数据时比较容易,随机访问速度快,但是插入和删除就比较费劲了。读取可以直接根据索引,插入和删除则比较耗时,插一个数据需要移动大量元素,在内存中空出一个元素的空间,然后将要增加的元素放在其中,如果想删除一个元素,同样需要移动大量元素去掉被移动的元素。所以如果需求是快速访问数据,很少或者几乎不插入和删除元素,数组是一个不错的选择
98

10-
#### 类别
9+
​ 最常见的有一维数组和二维数组,稍微复杂一点的是多维数组和动态数组。在c++中,STL提供了Vector,在Java中,Collection集合中提供了ArrayList和Vector,对于Python而言,内置的List就是一个动态指针数组。当列表中没有空间存储新的元素时,列表会动态地改变大小以容纳新的元素,每次改变大小时,会预留一部分空间以降低改变大小的频率。
10+
11+
### 类别
1112
- 1.无序数组
1213
- 概念:未经过排序的数组
1314
- 优点:插入快
@@ -31,17 +32,19 @@
3132
### 题型总结
3233
【一维数组】
3334
#### 1.K-Sum
34-
  这类题目通常会给定一个数组和一个值,让求出这个数组中两个/三个/K个值的和等于这个给定的值target。leetcode第一题就是two-sum,对于这类题目,首先看题目要求的时间复杂度和空间复杂度是什么,其次看有没有限制条件,如要求不能有重复的子数组或者要求按照升序/降序排列等。解法如下:
35+
这类题目通常会给定一个数组和一个值,让求出这个数组中两个/三个/K个值的和等于这个给定的值target。leetcode第一题就是two-sum,对于这类题目,首先看题目要求的时间复杂度和空间复杂度是什么,其次看有没有限制条件,如要求不能有重复的子数组或者要求按照升序/降序排列等。解法如下:
3536
- 暴力解法:最常见,但是通常会超时,只能作为备选,
3637
- hash-map:建立一个hash-map循环遍历一次即可
3738
- two-pointers:定位两个指针根绝和的大小来移动另外一个。这里设定的指针个数根据题目中K的个数来定。3Sum中可以设定3个指针,固定两个,移动另一个
3839

3940

4041
#### 2.区间问题
41-
  这类题目通常会给一个包含多个子数组的数组,然后针对区间是否重合来判断true or false。解题技巧:
42-
1. 按start排序
43-
2. 在前一个区间的end和后一个区间的start找交集
44-
- 例题:252 meeting room[easy]https://leetcode.com/problems/meeting-rooms/)
42+
​ 这类题目通常会给一个包含多个子数组的数组,然后针对区间是否重合来判断true or false。解题技巧:
43+
44+
> 1. 按start排序
45+
> 2. 在前一个区间的end和后一个区间的start找交集
46+
47+
- 例题: [252 meeting room](https://leetcode.com/problems/meeting-rooms/)
4548
- 题目理解:给定一个数组,包含每个会议的开始时间和结束时间[[s1,e1],[s2,e2],...] (si < ei),判断一个人能否参加所有的会议
4649
- test case:
4750
>Example1:
@@ -96,7 +99,7 @@ class Solution(object):
9699
97100
- code:
98101
Java解法
99-
```
102+
```java
100103
class Solution {
101104
public int minSubArrayLen(int s, int[] nums) {
102105
int res = Integer.MAX_VALUE;//因为是求min,所以设定是Max_VALUE,然后最后的res比较就行,注意res不是0
@@ -111,7 +114,7 @@ class Solution {
111114
return res == Integer.MAX_VALUE? 0:res;
112115
```
113116
Python解法
114-
```
117+
```python
115118
class Solution:
116119

117120
def minSubArrayLen(self, s, nums):
@@ -126,8 +129,20 @@ def minSubArrayLen(self, s, nums):
126129
return result if result <= len(nums) else 0
127130
```
128131

129-
【二维数组】
130-
#### 4.Rotate题型
132+
133+
134+
### 二维数组
135+
136+
#### Rotate题型
137+
138+
139+
140+
141+
142+
143+
144+
145+
131146

132147

133148

Array/pic/subarray.png

1.12 MB
Loading

Linklist/linklist.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -692,6 +692,8 @@ class Solution(object):
692692

693693
> LeetCode中含有拆分类的题目:
694694

695+
| 序号 | 题目 | 难度 | 代码 |
696+
| ---- | ------------------------------------------------------------ | ------ | ----------------- |
695697
| 725 | [Split Linked List in Parts ](https://leetcode.com/problems/split-linked-list-in-parts) | Medium | python、java、c++ |
696698
| ---- | ------------------------------------------------------------ | ------ | ----------------- |
697699
| 86 | [Partition List ](https://leetcode.com/problems/partition-list) | Medium | python、java、c++ |
@@ -812,6 +814,8 @@ class Solution(object):
812814

813815
> LeetCode中 包含链表排序的题目:
814816

817+
| 序号 | 题目 | 难度 | 代码 |
818+
| ---- | ------------------------------------------------------------ | ------ | ----------------- |
815819
| 143 | [Reorder List ](https://leetcode.com/problems/reorder-list) | Medium | python、java、c++ |
816820
| ---- | ------------------------------------------------------------ | ------ | ----------------- |
817821
| 147 | [Insertion Sort List ](https://leetcode.com/problems/insertion-sort-list) | Medium | python、java、c++ |

0 commit comments

Comments
 (0)