diff --git a/Algorithms/881. Boats to Save People/881. Boats to Save People.go b/Algorithms/881. Boats to Save People/881. Boats to Save People.go new file mode 100644 index 00000000..54889080 --- /dev/null +++ b/Algorithms/881. Boats to Save People/881. Boats to Save People.go @@ -0,0 +1,24 @@ +package leetcode + +import ( + "sort" +) + +func numRescueBoats(people []int, limit int) int { + sort.Ints(people) + left, right, res := 0, len(people)-1, 0 + for left <= right { + if left == right { + res++ + return res + } + if people[left]+people[right] <= limit { + left++ + right-- + } else { + right-- + } + res++ + } + return res +} diff --git a/Algorithms/881. Boats to Save People/881. Boats to Save People_test.go b/Algorithms/881. Boats to Save People/881. Boats to Save People_test.go new file mode 100644 index 00000000..558eff83 --- /dev/null +++ b/Algorithms/881. Boats to Save People/881. Boats to Save People_test.go @@ -0,0 +1,63 @@ +package leetcode + +import ( + "fmt" + "testing" +) + +type question881 struct { + para881 + ans881 +} + +// para 是参数 +// one 代表第一个参数 +type para881 struct { + s []int + k int +} + +// ans 是答案 +// one 代表第一个答案 +type ans881 struct { + one int +} + +func Test_Problem881(t *testing.T) { + + qs := []question881{ + + question881{ + para881{[]int{1, 2}, 3}, + ans881{1}, + }, + + question881{ + para881{[]int{3, 2, 2, 1}, 3}, + ans881{3}, + }, + + question881{ + para881{[]int{3, 5, 3, 4}, 5}, + ans881{4}, + }, + + question881{ + para881{[]int{5, 1, 4, 2}, 6}, + ans881{2}, + }, + + question881{ + para881{[]int{3, 2, 2, 1}, 3}, + ans881{3}, + }, + } + + fmt.Printf("------------------------Leetcode Problem 881------------------------\n") + + for _, q := range qs { + _, p := q.ans881, q.para881 + fmt.Printf("【input】:%v 【output】:%v\n", p, numRescueBoats(p.s, p.k)) + } + fmt.Printf("\n\n\n") +} diff --git a/Algorithms/881. Boats to Save People/README.md b/Algorithms/881. Boats to Save People/README.md new file mode 100644 index 00000000..fd7d1f9e --- /dev/null +++ b/Algorithms/881. Boats to Save People/README.md @@ -0,0 +1,50 @@ +# [881. Boats to Save People](https://leetcode.com/problems/boats-to-save-people/) + +## 题目 + +The i-th person has weight people[i], and each boat can carry a maximum weight of limit. + +Each boat carries at most 2 people at the same time, provided the sum of the weight of those people is at most limit. + +Return the minimum number of boats to carry every given person. (It is guaranteed each person can be carried by a boat.) + + +Example 1: + +```c +Input: people = [1,2], limit = 3 +Output: 1 +Explanation: 1 boat (1, 2) +``` + + +Example 2: + +```c +Input: people = [3,2,2,1], limit = 3 +Output: 3 +Explanation: 3 boats (1, 2), (2) and (3) +``` + + +Example 3: + +```c +Input: people = [3,5,3,4], limit = 5 +Output: 4 +Explanation: 4 boats (3), (3), (4), (5) +``` + +Note: + +- 1 <= people.length <= 50000 +- 1 <= people[i] <= limit <= 30000 + + +## 题目大意 + +给出人的重量数组,和一个船最大载重量 limit。一个船最多装 2 个人。要求输出装下所有人,最小需要多少艘船。 + +先对人的重量进行排序,然后用 2 个指针分别指向一前一后,一起计算这两个指针指向的重量之和,如果小于 limit,左指针往右移动,并且右指针往左移动。如果大于等于 limit,右指针往左移动。每次指针移动,需要船的个数都要 ++。 + +