算法笔试模拟题精解之“朋友一生一起走”

在线编程介绍

阿里云开发者社区在线编程产品,针对广大开发者学习、实践、面试、应聘、考试认证等打造的免费在线刷题神器。题库来自笔试模拟题、算法大赛模拟题等,界面整洁明了,操作简单,为用户营造专心答题的学习环境。点击链接开始体验:https://developer.aliyun.com/coding

本文为大家介绍其中的 第52题:朋友一生一起走 的题目解析,具体如下:

题目描述

题目等级:容易
知识点:数学

查看题目:朋友一生一起走
Tom想从n个数(1<=n<=1e14)中把“好朋友”挑出来,“好朋友”的定义是相加等于k(1<=k<=1e14),其中(1,2)和(2,1)算一对,请你帮Tom计算一下1-n中一共有多少对好朋友?
输入数字总数n和“好朋友”数的和k;
输出1-n中的好朋友有多少对。
示例1
输入:
3
5
输出:
1

解题方法

根据题意可以得出,在不考虑数字范围的情况下,相加等于 k 的数总共有 k/2 对(如果 k 为偶数,应为 k/2-1 对,此处以 k/2 为例)。也就是说,如果 n 的值大于 k 的值,那么 k 的所有数对都符合条件,即 1-n 中一共有 k/2 对好朋友。

如果 n 的值小于等于 k,那么 k 的有些数对会超出 n 的范围,需要舍弃。

根据n的范围限制,可以计算得出,需要舍弃掉的对数为(k-n-1), 即此时一共有 k/2 -(k-n-1)对好朋友,若计算出此数为负值,即好朋友的对数为0。

时间复杂度:O(1)
空间复杂度:O(1)

看完之后是不是有了想法了呢,快来练练手吧>>查看题目:朋友一生一起走

算法笔试模拟题精解之“朋友一生一起走”

上一篇:算法笔试模拟题精解之“期末考试”


下一篇:算法笔试模拟题精解之“简单题?”