添加 16 题

This commit is contained in:
YDZ
2020-08-11 17:20:53 +08:00
parent 388e1fb902
commit 9f47c758c9
64 changed files with 4149 additions and 0 deletions

View File

@ -0,0 +1,27 @@
package leetcode
func luckyNumbers(matrix [][]int) []int {
t, r, res := make([]int, len(matrix[0])), make([]int, len(matrix[0])), []int{}
for _, val := range matrix {
m, k := val[0], 0
for j := 0; j < len(matrix[0]); j++ {
if val[j] < m {
m = val[j]
k = j
}
if t[j] < val[j] {
t[j] = val[j]
}
}
if t[k] == m {
r[k] = m
}
}
for k, v := range r {
if v > 0 && v == t[k] {
res = append(res, v)
}
}
return res
}

View File

@ -0,0 +1,58 @@
package leetcode
import (
"fmt"
"testing"
)
type question1380 struct {
para1380
ans1380
}
// para 是参数
// one 代表第一个参数
type para1380 struct {
one [][]int
}
// ans 是答案
// one 代表第一个答案
type ans1380 struct {
one []int
}
func Test_Problem1380(t *testing.T) {
qs := []question1380{
question1380{
para1380{[][]int{[]int{3, 7, 8}, []int{9, 11, 13}, []int{15, 16, 17}}},
ans1380{[]int{15}},
},
question1380{
para1380{[][]int{[]int{1, 10, 4, 2}, []int{9, 3, 8, 7}, []int{15, 16, 17, 12}}},
ans1380{[]int{12}},
},
question1380{
para1380{[][]int{[]int{1, 2, 3, 4, 5}, []int{1, 2, 3, 4, 5}}},
ans1380{[]int{1}},
},
question1380{
para1380{[][]int{[]int{7, 8}, []int{1, 2}}},
ans1380{[]int{7}},
},
// 如需多个测试,可以复制上方元素。
}
fmt.Printf("------------------------Leetcode Problem 1380------------------------\n")
for _, q := range qs {
_, p := q.ans1380, q.para1380
fmt.Printf("【input】:%v 【output】:%v\n", p, luckyNumbers(p.one))
}
fmt.Printf("\n\n\n")
}

View File

@ -0,0 +1,83 @@
# [1380. Lucky Numbers in a Matrix](https://leetcode.com/problems/lucky-numbers-in-a-matrix/)
## 题目
Given a `m * n` matrix of **distinct** numbers, return all lucky numbers in the matrix in **any** order.
A lucky number is an element of the matrix such that it is the minimum element in its row and maximum in its column.
**Example 1**:
```
Input: matrix = [[3,7,8],[9,11,13],[15,16,17]]
Output: [15]
Explanation: 15 is the only lucky number since it is the minimum in its row and the maximum in its column
```
**Example 2**:
```
Input: matrix = [[1,10,4,2],[9,3,8,7],[15,16,17,12]]
Output: [12]
Explanation: 12 is the only lucky number since it is the minimum in its row and the maximum in its column.
```
**Example 3**:
```
Input: matrix = [[7,8],[1,2]]
Output: [7]
```
**Constraints**:
- `m == mat.length`
- `n == mat[i].length`
- `1 <= n, m <= 50`
- `1 <= matrix[i][j] <= 10^5`.
- All elements in the matrix are distinct.
## 题目大意
给你一个 m * n 的矩阵,矩阵中的数字 各不相同 。请你按 任意 顺序返回矩阵中的所有幸运数。幸运数是指矩阵中满足同时下列两个条件的元素:
- 在同一行的所有元素中最小
- 在同一列的所有元素中最大
## 解题思路
- 找出矩阵中的幸运数。幸运数的定义:同时满足 2 个条件,在同一行的所有元素中最小并且在同一列的所有元素中最大。
- 简单题。按照题意遍历矩阵,找到同时满足 2 个条件的数输出即可。
## 代码
```go
func luckyNumbers(matrix [][]int) []int {
t, r, res := make([]int, len(matrix[0])), make([]int, len(matrix[0])), []int{}
for _, val := range matrix {
m, k := val[0], 0
for j := 0; j < len(matrix[0]); j++ {
if val[j] < m {
m = val[j]
k = j
}
if t[j] < val[j] {
t[j] = val[j]
}
}
if t[k] == m {
r[k] = m
}
}
for k, v := range r {
if v > 0 && v == t[k] {
res = append(res, v)
}
}
return res
}
```