Skip to content

Commit

Permalink
Add solution 1603、1608、1700、1710、1716、1720、1725、1732、1736、1742、1748、1…
Browse files Browse the repository at this point in the history
…752、1758
  • Loading branch information
halfrost committed Feb 15, 2021
1 parent 9de9488 commit 8796fe7
Show file tree
Hide file tree
Showing 74 changed files with 3,219 additions and 305 deletions.
440 changes: 220 additions & 220 deletions README.md

Large diffs are not rendered by default.

51 changes: 51 additions & 0 deletions leetcode/1603.Design-Parking-System/1603. Design Parking System.go
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);
*/
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))
}
103 changes: 103 additions & 0 deletions leetcode/1603.Design-Parking-System/README.md
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);
*/
```
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
}
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")
}
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
}
```
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
}
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")
}
Loading

0 comments on commit 8796fe7

Please sign in to comment.