This commit is contained in:
ranwenjie
2021-09-29 19:20:38 +08:00
parent fc99cdfa71
commit 0a43530e64
11 changed files with 187 additions and 58 deletions
@@ -30,14 +30,18 @@ struct ListNode
ListNode getIntersectionNode(ListNode headA, ListNode headB) {
// p1 指向 A 链表头结点,p2 指向 B 链表头结点
ListNode p1 = headA, p2 = headB;
while (p1 != p2) {
// p1 走一步,如果走到 A 链表末尾,转到 B 链表
if (p1 == null) p1 = headB;
else p1 = p1.next;
// p2 走一步,如果走到 B 链表末尾,转到 A 链表
if (p2 == null) p2 = headA;
else p2 = p2.next;
}
return p1;
}
```
@@ -1,6 +1,50 @@
#数列-nsum问题
## 数组,找出和为 s 的两个数
暴力解法
```
class Solution {
public int[] twoSum(int[] nums, int target) {
int res[] = new int[2];
for(int i = 0; i < nums.length; i++){
for(int j = i + 1; j < nums.length; j++){
if(nums[i] + nums[j] == target){
res[0] = i;
res[1] = j;
break;
}
}
}
return res;
}
}
```
使用 hash表,2遍扫描
``` Java
class Solution {
public int[] twoSum(int[] nums, int target) {
int res[] = new int[2];
Map<Integer, Integer> map= new HashMap<>();
for(int i = 0; i < nums.length; i++){
map.put(nums[i], i);
}
for(int i = 0; i < nums.length; i++){
int temp = target - nums[i];
if(map.containsKey(temp) && map.get(temp) != i){
res[0] = map.get(temp);
res[1] = i;
}
}
return res;
}
}
```
## 找出和为N+1的2个数
+44 -43
View File
@@ -3,49 +3,6 @@
矩阵在计算机中表示就是二维数组。这部分内容都是有关二维数组和矩阵相关的题目。
## 二维数组中的查找
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
```
1 3 5 7
2 5 7 12
4 6 9 23
6 9 23 75
```
```
int exist_inmatrix(int *matrix,int rows,int cols,int target);
```
## 矩阵中最大的二维矩阵
求一个矩阵中最大的二维矩阵(元素和最大).如:
```
1 2 0 3 4
2 3 4 5 1
1 1 5 3 0
```
中最大的是:
```
4 5
5 3
```
要求:
(1)写出算法;
(2)分析时间复杂度;
(3)用C写出关键代码
```
int max_sum_submatrix(int *matrix,int rows,int cols,int *tmatrix,int *trows,int tcols)
```
## 顺时针打印矩阵
题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。
@@ -60,6 +17,7 @@ int max_sum_submatrix(int *matrix,int rows,int cols,int *tmatrix,int *trows,int
则依次打印出数字`1, 2, 3, 4, 8, 12, 16, 15, 14, 13, 9, 5, 6, 7, 11, 10` 。
分析:包括Autodesk、EMC在内的多家公司在面试或者笔试里采用过这道题。
难点: 各种边界条件判断,很容易搞错
一圈一圈打印,第一圈origin是(0,0),第二圈是(1,1)
@@ -164,6 +122,49 @@ void printArry(int *a,int rows,int columns)
## 二维数组中的查找
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
```
1 3 5 7
2 5 7 12
4 6 9 23
6 9 23 75
```
```
int exist_inmatrix(int *matrix,int rows,int cols,int target);
```
## 矩阵中最大的二维矩阵
求一个矩阵中最大的二维矩阵(元素和最大).如:
```
1 2 0 3 4
2 3 4 5 1
1 1 5 3 0
```
中最大的是:
```
4 5
5 3
```
要求:
(1)写出算法;
(2)分析时间复杂度;
(3)用C写出关键代码
```
int max_sum_submatrix(int *matrix,int rows,int cols,int *tmatrix,int *trows,int tcols)
```
## 矩阵中的最大上升路径