-
-
Notifications
You must be signed in to change notification settings - Fork 5.7k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add solution 1603、1608、1700、1710、1716、1720、1725、1732、1736、1742、1748、1…
…752、1758
- Loading branch information
Showing
74 changed files
with
3,219 additions
and
305 deletions.
There are no files selected for viewing
51 changes: 51 additions & 0 deletions
51
leetcode/1603.Design-Parking-System/1603. Design Parking System.go
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,51 @@ | ||
package leetcode | ||
|
||
type ParkingSystem struct { | ||
Big int | ||
Medium int | ||
Small int | ||
} | ||
|
||
func Constructor(big int, medium int, small int) ParkingSystem { | ||
return ParkingSystem{ | ||
Big: big, | ||
Medium: medium, | ||
Small: small, | ||
} | ||
} | ||
|
||
func (this *ParkingSystem) AddCar(carType int) bool { | ||
switch carType { | ||
case 1: | ||
{ | ||
if this.Big > 0 { | ||
this.Big-- | ||
return true | ||
} | ||
return false | ||
} | ||
case 2: | ||
{ | ||
if this.Medium > 0 { | ||
this.Medium-- | ||
return true | ||
} | ||
return false | ||
} | ||
case 3: | ||
{ | ||
if this.Small > 0 { | ||
this.Small-- | ||
return true | ||
} | ||
return false | ||
} | ||
} | ||
return false | ||
} | ||
|
||
/** | ||
* Your ParkingSystem object will be instantiated and called as such: | ||
* obj := Constructor(big, medium, small); | ||
* param_1 := obj.AddCar(carType); | ||
*/ |
15 changes: 15 additions & 0 deletions
15
leetcode/1603.Design-Parking-System/1603. Design Parking System_test.go
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
package leetcode | ||
|
||
import ( | ||
"fmt" | ||
"testing" | ||
) | ||
|
||
func Test_Problem1603(t *testing.T) { | ||
obj := Constructor(1, 1, 0) | ||
fmt.Printf("obj = %v\n", obj) | ||
fmt.Printf("obj = %v\n", obj.AddCar(1)) | ||
fmt.Printf("obj = %v\n", obj.AddCar(2)) | ||
fmt.Printf("obj = %v\n", obj.AddCar(3)) | ||
fmt.Printf("obj = %v\n", obj.AddCar(1)) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,103 @@ | ||
# [1603. Design Parking System](https://leetcode.com/problems/design-parking-system/) | ||
|
||
|
||
## 题目 | ||
|
||
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. | ||
|
||
Implement the `ParkingSystem` class: | ||
|
||
- `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. | ||
- `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`. | ||
|
||
**Example 1:** | ||
|
||
``` | ||
Input | ||
["ParkingSystem", "addCar", "addCar", "addCar", "addCar"] | ||
[[1, 1, 0], [1], [2], [3], [1]] | ||
Output | ||
[null, true, true, false, false] | ||
Explanation | ||
ParkingSystem parkingSystem = new ParkingSystem(1, 1, 0); | ||
parkingSystem.addCar(1); // return true because there is 1 available slot for a big car | ||
parkingSystem.addCar(2); // return true because there is 1 available slot for a medium car | ||
parkingSystem.addCar(3); // return false because there is no available slot for a small car | ||
parkingSystem.addCar(1); // return false because there is no available slot for a big car. It is already occupied. | ||
``` | ||
|
||
**Constraints:** | ||
|
||
- `0 <= big, medium, small <= 1000` | ||
- `carType` is `1`, `2`, or `3` | ||
- At most `1000` calls will be made to `addCar` | ||
|
||
## 题目大意 | ||
|
||
请你给一个停车场设计一个停车系统。停车场总共有三种不同大小的车位:大,中和小,每种尺寸分别有固定数目的车位。 | ||
|
||
请你实现 ParkingSystem 类: | ||
|
||
- ParkingSystem(int big, int medium, int small) 初始化 ParkingSystem 类,三个参数分别对应每种停车位的数目。 | ||
- bool addCar(int carType) 检查是否有 carType 对应的停车位。 carType 有三种类型:大,中,小,分别用数字 1, 2 和 3 表示。一辆车只能停在 carType 对应尺寸的停车位中。如果没有空车位,请返回 false ,否则将该车停入车位并返回 true 。 | ||
|
||
## 解题思路 | ||
|
||
- 简单题。分别用 3 个变量表示大,中和小车位。`addCar()` 判断这 3 个变量是否还有空车位即可。 | ||
|
||
## 代码 | ||
|
||
```go | ||
package leetcode | ||
|
||
type ParkingSystem struct { | ||
Big int | ||
Medium int | ||
Small int | ||
} | ||
|
||
func Constructor(big int, medium int, small int) ParkingSystem { | ||
return ParkingSystem{ | ||
Big: big, | ||
Medium: medium, | ||
Small: small, | ||
} | ||
} | ||
|
||
func (this *ParkingSystem) AddCar(carType int) bool { | ||
switch carType { | ||
case 1: | ||
{ | ||
if this.Big > 0 { | ||
this.Big-- | ||
return true | ||
} | ||
return false | ||
} | ||
case 2: | ||
{ | ||
if this.Medium > 0 { | ||
this.Medium-- | ||
return true | ||
} | ||
return false | ||
} | ||
case 3: | ||
{ | ||
if this.Small > 0 { | ||
this.Small-- | ||
return true | ||
} | ||
return false | ||
} | ||
} | ||
return false | ||
} | ||
|
||
/** | ||
* Your ParkingSystem object will be instantiated and called as such: | ||
* obj := Constructor(big, medium, small); | ||
* param_1 := obj.AddCar(carType); | ||
*/ | ||
``` |
18 changes: 18 additions & 0 deletions
18
...ts-Greater-Than-or-Equal-X/1608. Special Array With X Elements Greater Than or Equal X.go
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
package leetcode | ||
|
||
import "sort" | ||
|
||
func specialArray(nums []int) int { | ||
sort.Ints(nums) | ||
x := len(nums) | ||
for _, num := range nums { | ||
if num >= x { | ||
return x | ||
} | ||
x-- | ||
if num >= x { | ||
return -1 | ||
} | ||
} | ||
return -1 | ||
} |
57 changes: 57 additions & 0 deletions
57
...eater-Than-or-Equal-X/1608. Special Array With X Elements Greater Than or Equal X_test.go
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,57 @@ | ||
package leetcode | ||
|
||
import ( | ||
"fmt" | ||
"testing" | ||
) | ||
|
||
type question1608 struct { | ||
para1608 | ||
ans1608 | ||
} | ||
|
||
// para 是参数 | ||
// one 代表第一个参数 | ||
type para1608 struct { | ||
nums []int | ||
} | ||
|
||
// ans 是答案 | ||
// one 代表第一个答案 | ||
type ans1608 struct { | ||
one int | ||
} | ||
|
||
func Test_Problem1608(t *testing.T) { | ||
|
||
qs := []question1608{ | ||
|
||
{ | ||
para1608{[]int{3, 5}}, | ||
ans1608{2}, | ||
}, | ||
|
||
{ | ||
para1608{[]int{0, 0}}, | ||
ans1608{-1}, | ||
}, | ||
|
||
{ | ||
para1608{[]int{0, 4, 3, 0, 4}}, | ||
ans1608{3}, | ||
}, | ||
|
||
{ | ||
para1608{[]int{3, 6, 7, 7, 0}}, | ||
ans1608{-1}, | ||
}, | ||
} | ||
|
||
fmt.Printf("------------------------Leetcode Problem 1608------------------------\n") | ||
|
||
for _, q := range qs { | ||
_, p := q.ans1608, q.para1608 | ||
fmt.Printf("【input】:%v 【output】:%v \n", p, specialArray(p.nums)) | ||
} | ||
fmt.Printf("\n\n\n") | ||
} |
80 changes: 80 additions & 0 deletions
80
leetcode/1608.Special-Array-With-X-Elements-Greater-Than-or-Equal-X/README.md
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,80 @@ | ||
# [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/) | ||
|
||
## 题目 | ||
|
||
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`. | ||
|
||
Notice that `x` **does not** have to be an element in `nums`. | ||
|
||
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**. | ||
|
||
**Example 1:** | ||
|
||
``` | ||
Input: nums = [3,5] | ||
Output: 2 | ||
Explanation: There are 2 values (3 and 5) that are greater than or equal to 2. | ||
``` | ||
|
||
**Example 2:** | ||
|
||
``` | ||
Input: nums = [0,0] | ||
Output: -1 | ||
Explanation: No numbers fit the criteria for x. | ||
If x = 0, there should be 0 numbers >= x, but there are 2. | ||
If x = 1, there should be 1 number >= x, but there are 0. | ||
If x = 2, there should be 2 numbers >= x, but there are 0. | ||
x cannot be greater since there are only 2 numbers in nums. | ||
``` | ||
|
||
**Example 3:** | ||
|
||
``` | ||
Input: nums = [0,4,3,0,4] | ||
Output: 3 | ||
Explanation: There are 3 values that are greater than or equal to 3. | ||
``` | ||
|
||
**Example 4:** | ||
|
||
``` | ||
Input: nums = [3,6,7,7,0] | ||
Output: -1 | ||
``` | ||
|
||
**Constraints:** | ||
|
||
- `1 <= nums.length <= 100` | ||
- `0 <= nums[i] <= 1000` | ||
|
||
## 题目大意 | ||
|
||
给你一个非负整数数组 nums 。如果存在一个数 x ,使得 nums 中恰好有 x 个元素 大于或者等于 x ,那么就称 nums 是一个 特殊数组 ,而 x 是该数组的 特征值 。(注意: x 不必 是 nums 的中的元素。)如果数组 nums 是一个 特殊数组 ,请返回它的特征值 x 。否则,返回 -1 。可以证明的是,如果 nums 是特殊数组,那么其特征值 x 是 唯一的 。 | ||
|
||
## 解题思路 | ||
|
||
- 简单题。抓住题干中给的证明,特征值是唯一的。先将数组从小到大排序,下标的含义与特征值就等价了。下标 `i` 代表大于等于 `nums[i]` 的元素有 `len(nums) - i` 个,那么从第 0 个下标的元素开始遍历,如果这个元素都大于 `len(nums)`,那么后面 `len(nums)` 个元素也都大于等于它,特征值就找到了。如果特征值减一以后,仍然满足 `nums[i] >= x`,说明满足条件的值有多个,这一点不满足特征值唯一性,可以直接返回 -1 了。下标继续右移,特征值继续减一。如果最终循环结束依旧找不到特征值,返回 -1 。 | ||
|
||
## 代码 | ||
|
||
```go | ||
package leetcode | ||
|
||
import "sort" | ||
|
||
func specialArray(nums []int) int { | ||
sort.Ints(nums) | ||
x := len(nums) | ||
for _, num := range nums { | ||
if num >= x { | ||
return x | ||
} | ||
x-- | ||
if num >= x { | ||
return -1 | ||
} | ||
} | ||
return -1 | ||
} | ||
``` |
13 changes: 13 additions & 0 deletions
13
...00.Number-of-Students-Unable-to-Eat-Lunch/1700. Number of Students Unable to Eat Lunch.go
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
package leetcode | ||
|
||
func countStudents(students []int, sandwiches []int) int { | ||
tmp, n, i := [2]int{}, len(students), 0 | ||
for _, v := range students { | ||
tmp[v]++ | ||
} | ||
for i < n && tmp[sandwiches[i]] > 0 { | ||
tmp[sandwiches[i]]-- | ||
i++ | ||
} | ||
return n - i | ||
} |
48 changes: 48 additions & 0 deletions
48
...mber-of-Students-Unable-to-Eat-Lunch/1700. Number of Students Unable to Eat Lunch_test.go
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,48 @@ | ||
package leetcode | ||
|
||
import ( | ||
"fmt" | ||
"testing" | ||
) | ||
|
||
type question1700 struct { | ||
para1700 | ||
ans1700 | ||
} | ||
|
||
// para 是参数 | ||
// one 代表第一个参数 | ||
type para1700 struct { | ||
students []int | ||
sandwiches []int | ||
} | ||
|
||
// ans 是答案 | ||
// one 代表第一个答案 | ||
type ans1700 struct { | ||
one int | ||
} | ||
|
||
func Test_Problem1700(t *testing.T) { | ||
|
||
qs := []question1700{ | ||
|
||
{ | ||
para1700{[]int{1, 1, 0, 0}, []int{0, 1, 0, 1}}, | ||
ans1700{0}, | ||
}, | ||
|
||
{ | ||
para1700{[]int{1, 1, 1, 0, 0, 1}, []int{1, 0, 0, 0, 1, 1}}, | ||
ans1700{3}, | ||
}, | ||
} | ||
|
||
fmt.Printf("------------------------Leetcode Problem 1700------------------------\n") | ||
|
||
for _, q := range qs { | ||
_, p := q.ans1700, q.para1700 | ||
fmt.Printf("【input】:%v 【output】:%v\n", p, countStudents(p.students, p.sandwiches)) | ||
} | ||
fmt.Printf("\n\n\n") | ||
} |
Oops, something went wrong.