Skip to content

Commit 8796fe7

Browse files
committed
Add solution 1603、1608、1700、1710、1716、1720、1725、1732、1736、1742、1748、1752、1758
1 parent 9de9488 commit 8796fe7

File tree

74 files changed

+3219
-305
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

74 files changed

+3219
-305
lines changed

README.md

+220-220
Large diffs are not rendered by default.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package leetcode
2+
3+
type ParkingSystem struct {
4+
Big int
5+
Medium int
6+
Small int
7+
}
8+
9+
func Constructor(big int, medium int, small int) ParkingSystem {
10+
return ParkingSystem{
11+
Big: big,
12+
Medium: medium,
13+
Small: small,
14+
}
15+
}
16+
17+
func (this *ParkingSystem) AddCar(carType int) bool {
18+
switch carType {
19+
case 1:
20+
{
21+
if this.Big > 0 {
22+
this.Big--
23+
return true
24+
}
25+
return false
26+
}
27+
case 2:
28+
{
29+
if this.Medium > 0 {
30+
this.Medium--
31+
return true
32+
}
33+
return false
34+
}
35+
case 3:
36+
{
37+
if this.Small > 0 {
38+
this.Small--
39+
return true
40+
}
41+
return false
42+
}
43+
}
44+
return false
45+
}
46+
47+
/**
48+
* Your ParkingSystem object will be instantiated and called as such:
49+
* obj := Constructor(big, medium, small);
50+
* param_1 := obj.AddCar(carType);
51+
*/
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package leetcode
2+
3+
import (
4+
"fmt"
5+
"testing"
6+
)
7+
8+
func Test_Problem1603(t *testing.T) {
9+
obj := Constructor(1, 1, 0)
10+
fmt.Printf("obj = %v\n", obj)
11+
fmt.Printf("obj = %v\n", obj.AddCar(1))
12+
fmt.Printf("obj = %v\n", obj.AddCar(2))
13+
fmt.Printf("obj = %v\n", obj.AddCar(3))
14+
fmt.Printf("obj = %v\n", obj.AddCar(1))
15+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
# [1603. Design Parking System](https://leetcode.com/problems/design-parking-system/)
2+
3+
4+
## 题目
5+
6+
Design a parking system for a parking lot. The parking lot has three kinds of parking spaces: big, medium, and small, with a fixed number of slots for each size.
7+
8+
Implement the `ParkingSystem` class:
9+
10+
- `ParkingSystem(int big, int medium, int small)` Initializes object of the `ParkingSystem` class. The number of slots for each parking space are given as part of the constructor.
11+
- `bool addCar(int carType)` Checks whether there is a parking space of `carType` for the car that wants to get into the parking lot. `carType` can be of three kinds: big, medium, or small, which are represented by `1``2`, and `3` respectively. **A car can only park in a parking space of its** `carType`. If there is no space available, return `false`, else park the car in that size space and return `true`.
12+
13+
**Example 1:**
14+
15+
```
16+
Input
17+
["ParkingSystem", "addCar", "addCar", "addCar", "addCar"]
18+
[[1, 1, 0], [1], [2], [3], [1]]
19+
Output
20+
[null, true, true, false, false]
21+
22+
Explanation
23+
ParkingSystem parkingSystem = new ParkingSystem(1, 1, 0);
24+
parkingSystem.addCar(1); // return true because there is 1 available slot for a big car
25+
parkingSystem.addCar(2); // return true because there is 1 available slot for a medium car
26+
parkingSystem.addCar(3); // return false because there is no available slot for a small car
27+
parkingSystem.addCar(1); // return false because there is no available slot for a big car. It is already occupied.
28+
```
29+
30+
**Constraints:**
31+
32+
- `0 <= big, medium, small <= 1000`
33+
- `carType` is `1``2`, or `3`
34+
- At most `1000` calls will be made to `addCar`
35+
36+
## 题目大意
37+
38+
请你给一个停车场设计一个停车系统。停车场总共有三种不同大小的车位:大,中和小,每种尺寸分别有固定数目的车位。
39+
40+
请你实现 ParkingSystem 类:
41+
42+
- ParkingSystem(int big, int medium, int small) 初始化 ParkingSystem 类,三个参数分别对应每种停车位的数目。
43+
- bool addCar(int carType) 检查是否有 carType 对应的停车位。 carType 有三种类型:大,中,小,分别用数字 1, 2 和 3 表示。一辆车只能停在  carType 对应尺寸的停车位中。如果没有空车位,请返回 false ,否则将该车停入车位并返回 true 。
44+
45+
## 解题思路
46+
47+
- 简单题。分别用 3 个变量表示大,中和小车位。`addCar()` 判断这 3 个变量是否还有空车位即可。
48+
49+
## 代码
50+
51+
```go
52+
package leetcode
53+
54+
type ParkingSystem struct {
55+
Big int
56+
Medium int
57+
Small int
58+
}
59+
60+
func Constructor(big int, medium int, small int) ParkingSystem {
61+
return ParkingSystem{
62+
Big: big,
63+
Medium: medium,
64+
Small: small,
65+
}
66+
}
67+
68+
func (this *ParkingSystem) AddCar(carType int) bool {
69+
switch carType {
70+
case 1:
71+
{
72+
if this.Big > 0 {
73+
this.Big--
74+
return true
75+
}
76+
return false
77+
}
78+
case 2:
79+
{
80+
if this.Medium > 0 {
81+
this.Medium--
82+
return true
83+
}
84+
return false
85+
}
86+
case 3:
87+
{
88+
if this.Small > 0 {
89+
this.Small--
90+
return true
91+
}
92+
return false
93+
}
94+
}
95+
return false
96+
}
97+
98+
/**
99+
* Your ParkingSystem object will be instantiated and called as such:
100+
* obj := Constructor(big, medium, small);
101+
* param_1 := obj.AddCar(carType);
102+
*/
103+
```
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package leetcode
2+
3+
import "sort"
4+
5+
func specialArray(nums []int) int {
6+
sort.Ints(nums)
7+
x := len(nums)
8+
for _, num := range nums {
9+
if num >= x {
10+
return x
11+
}
12+
x--
13+
if num >= x {
14+
return -1
15+
}
16+
}
17+
return -1
18+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
package leetcode
2+
3+
import (
4+
"fmt"
5+
"testing"
6+
)
7+
8+
type question1608 struct {
9+
para1608
10+
ans1608
11+
}
12+
13+
// para 是参数
14+
// one 代表第一个参数
15+
type para1608 struct {
16+
nums []int
17+
}
18+
19+
// ans 是答案
20+
// one 代表第一个答案
21+
type ans1608 struct {
22+
one int
23+
}
24+
25+
func Test_Problem1608(t *testing.T) {
26+
27+
qs := []question1608{
28+
29+
{
30+
para1608{[]int{3, 5}},
31+
ans1608{2},
32+
},
33+
34+
{
35+
para1608{[]int{0, 0}},
36+
ans1608{-1},
37+
},
38+
39+
{
40+
para1608{[]int{0, 4, 3, 0, 4}},
41+
ans1608{3},
42+
},
43+
44+
{
45+
para1608{[]int{3, 6, 7, 7, 0}},
46+
ans1608{-1},
47+
},
48+
}
49+
50+
fmt.Printf("------------------------Leetcode Problem 1608------------------------\n")
51+
52+
for _, q := range qs {
53+
_, p := q.ans1608, q.para1608
54+
fmt.Printf("【input】:%v 【output】:%v \n", p, specialArray(p.nums))
55+
}
56+
fmt.Printf("\n\n\n")
57+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
# [1608. Special Array With X Elements Greater Than or Equal X](https://leetcode.com/problems/special-array-with-x-elements-greater-than-or-equal-x/)
2+
3+
## 题目
4+
5+
You are given an array `nums` of non-negative integers. `nums` is considered **special** if there exists a number `x` such that there are **exactly** `x` numbers in `nums` that are **greater than or equal to** `x`.
6+
7+
Notice that `x` **does not** have to be an element in `nums`.
8+
9+
Return `x` *if the array is **special**, otherwise, return* `-1`. It can be proven that if `nums` is special, the value for `x` is **unique**.
10+
11+
**Example 1:**
12+
13+
```
14+
Input: nums = [3,5]
15+
Output: 2
16+
Explanation: There are 2 values (3 and 5) that are greater than or equal to 2.
17+
```
18+
19+
**Example 2:**
20+
21+
```
22+
Input: nums = [0,0]
23+
Output: -1
24+
Explanation: No numbers fit the criteria for x.
25+
If x = 0, there should be 0 numbers >= x, but there are 2.
26+
If x = 1, there should be 1 number >= x, but there are 0.
27+
If x = 2, there should be 2 numbers >= x, but there are 0.
28+
x cannot be greater since there are only 2 numbers in nums.
29+
```
30+
31+
**Example 3:**
32+
33+
```
34+
Input: nums = [0,4,3,0,4]
35+
Output: 3
36+
Explanation: There are 3 values that are greater than or equal to 3.
37+
```
38+
39+
**Example 4:**
40+
41+
```
42+
Input: nums = [3,6,7,7,0]
43+
Output: -1
44+
```
45+
46+
**Constraints:**
47+
48+
- `1 <= nums.length <= 100`
49+
- `0 <= nums[i] <= 1000`
50+
51+
## 题目大意
52+
53+
给你一个非负整数数组 nums 。如果存在一个数 x ,使得 nums 中恰好有 x 个元素 大于或者等于 x ,那么就称 nums 是一个 特殊数组 ,而 x 是该数组的 特征值 。(注意: x 不必 是 nums 的中的元素。)如果数组 nums 是一个 特殊数组 ,请返回它的特征值 x 。否则,返回 -1 。可以证明的是,如果 nums 是特殊数组,那么其特征值 x 是 唯一的 。
54+
55+
## 解题思路
56+
57+
- 简单题。抓住题干中给的证明,特征值是唯一的。先将数组从小到大排序,下标的含义与特征值就等价了。下标 `i` 代表大于等于 `nums[i]` 的元素有 `len(nums) - i` 个,那么从第 0 个下标的元素开始遍历,如果这个元素都大于 `len(nums)`,那么后面 `len(nums)` 个元素也都大于等于它,特征值就找到了。如果特征值减一以后,仍然满足 `nums[i] >= x`,说明满足条件的值有多个,这一点不满足特征值唯一性,可以直接返回 -1 了。下标继续右移,特征值继续减一。如果最终循环结束依旧找不到特征值,返回 -1 。
58+
59+
## 代码
60+
61+
```go
62+
package leetcode
63+
64+
import "sort"
65+
66+
func specialArray(nums []int) int {
67+
sort.Ints(nums)
68+
x := len(nums)
69+
for _, num := range nums {
70+
if num >= x {
71+
return x
72+
}
73+
x--
74+
if num >= x {
75+
return -1
76+
}
77+
}
78+
return -1
79+
}
80+
```
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package leetcode
2+
3+
func countStudents(students []int, sandwiches []int) int {
4+
tmp, n, i := [2]int{}, len(students), 0
5+
for _, v := range students {
6+
tmp[v]++
7+
}
8+
for i < n && tmp[sandwiches[i]] > 0 {
9+
tmp[sandwiches[i]]--
10+
i++
11+
}
12+
return n - i
13+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
package leetcode
2+
3+
import (
4+
"fmt"
5+
"testing"
6+
)
7+
8+
type question1700 struct {
9+
para1700
10+
ans1700
11+
}
12+
13+
// para 是参数
14+
// one 代表第一个参数
15+
type para1700 struct {
16+
students []int
17+
sandwiches []int
18+
}
19+
20+
// ans 是答案
21+
// one 代表第一个答案
22+
type ans1700 struct {
23+
one int
24+
}
25+
26+
func Test_Problem1700(t *testing.T) {
27+
28+
qs := []question1700{
29+
30+
{
31+
para1700{[]int{1, 1, 0, 0}, []int{0, 1, 0, 1}},
32+
ans1700{0},
33+
},
34+
35+
{
36+
para1700{[]int{1, 1, 1, 0, 0, 1}, []int{1, 0, 0, 0, 1, 1}},
37+
ans1700{3},
38+
},
39+
}
40+
41+
fmt.Printf("------------------------Leetcode Problem 1700------------------------\n")
42+
43+
for _, q := range qs {
44+
_, p := q.ans1700, q.para1700
45+
fmt.Printf("【input】:%v 【output】:%v\n", p, countStudents(p.students, p.sandwiches))
46+
}
47+
fmt.Printf("\n\n\n")
48+
}

0 commit comments

Comments
 (0)