题解:我们知道,对于[1,n]中的自然数来说,分成两个集合后,其差的绝对值最小要么是1要么是0,我们只要求出[1,n]中元素之和,根据这个和是否是奇数还是偶数进行判断就好了。如果是奇数,那么分成两个集合后最小的差的绝对值为1,反之为0。
注意,求和的时候,如果用的是循环,可能会造成超时,建议使用等差数列求和公式。
时间复杂度:
空间复杂度:
参考代码:
class Solution { public: /** * 给定一个数n,返回分成两个集合后,这两个集合中元素之和的差的绝对值最小是多少? * @param n int整型 代表题意中的n * @return int整型 */ int solve(int n) { // write code here long long sum = n * (n + 1) / 2; return (sum & 1) ? 1 : 0; } };