Re: [闲聊] 每日leetcode

楼主: yam276 ('_')   2024-03-13 11:52:53
※ 引述《Rushia (みけねこ的鼻屎)》之铭言:
: https://leetcode.com/problems/find-the-pivot-integer
: 2485. Find the Pivot Integer
: 给定一个数字n,找出一个介于1~n的数字k满足 1+2+...+k = k+(k+1)+(k+2)+...+n,如
: 果不存在返回-1。
: 思路:
: 1.先求1~n的和
: 2.再遍历一次1~n把pivot放进去判断
我数学很烂
所以先求全数字和
然后for i = 1 to n
因为题目是 a+b+c = c+d+e
会有一个c位重复
所以每次循环
1. 先给left_sum加i
2. 比较left_sum跟right_sum
一样就return i;
3. 再给right_sum减i
跑完找不到c就是-1
Code:
impl Solution {
pub fn pivot_integer(n: i32) -> i32 {
if n <= 1 {
return n;
}
let mut right_sum = n * (n + 1) / 2;
let mut left_sum = 0;
for i in 1..right_sum {
left_sum += i;
if right_sum == left_sum {
return i;
}
right_sum -= i;
}
-1
}
}
第二种数学解别人的解法:
impl Solution {
pub fn pivot_integer(n: i32) -> i32 {
let p = ((n * (n + 1) / 2) as f64).sqrt();
if p == p.floor() { p as i32 } else { -1 }
}
}
作者: JIWP (JIWP)   2024-03-13 12:17:00
大师

Links booklink

Contact Us: admin [ a t ] ucptt.com