【阿里云在线编程】 52.朋友一生一起走

题目

题目传送门:传送门(点击此处)
在这里插入图片描述

题解

解题思路

  1. 数字 k,比如 k=5,它的 “好朋友” 分别是1和4、2和3;如果k=6,那么它的 “好朋友” 分别是 1和52和4,所以,单数的好朋友的对数会是 k / 2,而双数的好朋友的对数则是 k / 2 - 1
    我们可以考虑在数轴上考虑就会更加的清晰:
  2. k <= n 的时候,我们不用考虑 n 的先置,直接考虑k的 “好朋友”的对数,单数为 k / 2,双数为 k / 2 - 1
    在这里插入图片描述
  3. 2n <= k 的时候,先考虑这种情况,这个时候在 0-n 中,任何两个不相同的数字相加都不可能等于 k,所以此时为 0
    在这里插入图片描述
  4. n < k <2n 的时候,对于数字 k,仅有一部分 “好朋友”,比如说 n = 6k = 88“好朋友”2和63和5 这两对,,所以拥有对数就是 n – k / 2
    在这里插入图片描述

code

package solution52;

class Solution {
    public long solution(long n, long k) {
        long res = 0;
        if (k <= n) {
            if (k % 2 == 0) {
                res = k / 2 - 1;
            } else {
                res = k / 2;
            }
        } else if (k < 2 * n) {
            res = n - k / 2;
        }else{
            res = 0;
        }
        return res;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Geek-Banana

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值