2025-01-13:找出 K 秒后拿着球的孩子。用go语言,给定两个正整数 n 和 k,有 n 个编号从 0 到 n - 1
2025-01-13:找出 K 秒后拿着球的孩子。用go语言,给定两个正整数 n 和 k,有 n 个编号从 0 到 n - 1 的孩子排成一队。
最开始,编号为 0 的孩子手中有一个球,并向右传递。
每秒,持球的孩子会将球传给旁边的孩子。
当球到达队列的任一端(即编号为 0 或 n - 1 的孩子)时,传球方向会反转。
请返回 k 秒后接到球的孩子的编号。
提示:
2 <= n <= 50。
1 <= k <= 50。
输入:n = 3, k = 5。
输出:1。
解释:
经过的时间 孩子队列;
0 [0, 1, 2];
1 [0, 1, 2];
2 [0, 1, 2];
3 [0, 1, 2];
4 [0, 1, 2];
5 [0, 1, 2]。
答案2025-01-13:
题目来自leetcode3178。
大体步骤如下:
1.初始化孩子队列,编号为0到n-1。
2.设立一个变量t,用来记录球传递的位置。
3.计算每秒传递一次球后的位置:
-
计算当前传球的位置t,取余数操作
k % (n - 1)。 -
如果经过
k/(n-1)轮传球之后发现传球方向需反转,条件是(k/(n-1)) % 2 > 0,那么返回队列的倒数第二个位置n - t - 1,因为最后一个位置是编号为n-1的孩子,其实到该孩子手中的时候,传球方向会反转。 -
否则,返回位置t即可。
4.执行main函数,给定初始条件n=3,k=5,调用numberOfChild函数计算得到结果。
5.输出结果。
总的时间复杂度为O(1),因为无论n和k的取值如何,算法的执行时间不会随着n和k的增加而增加。
总的额外空间复杂度为O(1),因为除了几个变量外,没有使用额外的数据结构存储数据。
Go完整代码如下:
package main
import (
"fmt"
)
func numberOfChild(n, k int) int {
t := k % (n - 1)
if k/(n-1)%2 > 0 {
return n - t - 1
}
return t
}
func main() {
n := 3
k := 5
result := numberOfChild(n, k)
fmt.Println(result)
}

Rust完整代码如下:
fn number_of_child(n: i32, k: i32) -> i32 {
let t = k % (n - 1);
if k / (n - 1) % 2 > 0 {
return n - t - 1;
}
t
}
fn main() {
let n = 3;
let k = 5;
let result = number_of_child(n, k);
println!("{}", result);
}

C完整代码如下:
#include <stdio.h>
int numberOfChild(int n, int k) {
int t = k % (n - 1);
if (k / (n - 1) % 2 > 0) {
return n - t - 1;
}
return t;
}
int main() {
int n = 3;
int k = 5;
int result = numberOfChild(n, k);
printf("%d\n", result);
return 0;
}

C++完整代码如下:
#include <iostream>
int numberOfChild(int n, int k) {
int t = k % (n - 1);
if (k / (n - 1) % 2 > 0) {
return n - t - 1;
}
return t;
}
int main() {
int n = 3;
int k = 5;
int result = numberOfChild(n, k);
std::cout << result << std::endl;
return 0;
}

Python完整代码如下:
def number_of_child(n, k):
t = k % (n - 1)
if (k // (n - 1)) % 2 > 0:
return n - t - 1
return t
if __name__ == "__main__":
n = 3
k = 5
result = number_of_child(n, k)
print(result)

JavaScript完整代码如下:
function numberOfChild(n, k) {
const t = k % (n - 1);
if (Math.floor(k / (n - 1)) % 2 > 0) {
return n - t - 1;
}
return t;
}
const n = 3;
const k = 5;
const result = numberOfChild(n, k);
console.log(result);

Java完整代码如下:
public class Main {
public static int numberOfChild(int n, int k) {
int t = k % (n - 1);
if (k / (n - 1) % 2 > 0) {
return n - t - 1;
}
return t;
}
public static void main(String[] args) {
int n = 3;
int k = 5;
int result = numberOfChild(n, k);
System.out.println(result);
}
}

- 点赞
- 收藏
- 关注作者
评论(0)