diff --git a/leetcode/2501-2600/2582.Pass-the-Pillow/README.md b/leetcode/2501-2600/2582.Pass-the-Pillow/README.md new file mode 100644 index 000000000..c92a5f6e0 --- /dev/null +++ b/leetcode/2501-2600/2582.Pass-the-Pillow/README.md @@ -0,0 +1,33 @@ +# [2582.Pass the Pillow][title] + +## Description +There are `n` people standing in a line labeled from `1` to `n`. The first person in the line is holding a pillow initially. Every second, the person holding the pillow passes it to the next person standing in the line. Once the pillow reaches the end of the line, the direction changes, and people continue passing the pillow in the opposite direction. + +- For example, once the pillow reaches the nth person they pass it to the `n - 1th` person, then to the `n - 2th` person and so on. + +Given the two positive integers `n` and `time`, return the index of the person holding the pillow after `time` seconds. + +**Example 1:** + +``` +Input: n = 4, time = 5 +Output: 2 +Explanation: People pass the pillow in the following way: 1 -> 2 -> 3 -> 4 -> 3 -> 2. +After five seconds, the 2nd person is holding the pillow. +``` + +**Example 2:** + +``` +Input: n = 3, time = 2 +Output: 3 +Explanation: People pass the pillow in the following way: 1 -> 2 -> 3. +After two seconds, the 3rd person is holding the pillow. +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/pass-the-pillow +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2501-2600/2582.Pass-the-Pillow/Solution.go b/leetcode/2501-2600/2582.Pass-the-Pillow/Solution.go index d115ccf5e..d4e8525b1 100755 --- a/leetcode/2501-2600/2582.Pass-the-Pillow/Solution.go +++ b/leetcode/2501-2600/2582.Pass-the-Pillow/Solution.go @@ -1,5 +1,19 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(n int, time int) int { + need := n - 1 + + loop := time / need + left := time % need + if left != 0 { + loop++ + } + + if left == 0 { + left = need + } + if loop&1 != 0 { + return left + 1 + } + return need - left + 1 } diff --git a/leetcode/2501-2600/2582.Pass-the-Pillow/Solution_test.go b/leetcode/2501-2600/2582.Pass-the-Pillow/Solution_test.go index 14ff50eb4..aae452f94 100755 --- a/leetcode/2501-2600/2582.Pass-the-Pillow/Solution_test.go +++ b/leetcode/2501-2600/2582.Pass-the-Pillow/Solution_test.go @@ -10,30 +10,29 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + a, b int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", 4, 5, 2}, + {"TestCase2", 3, 2, 3}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.a, c.b) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.a, c.b) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { }