Link: https://leetcode.com/problems/determine-the-minimum-sum-of-a-k-avoiding-array/ ## 思路 $O(N)$ $O(N)$ is very intuitive let's talk about $O(N)$ $O(1)$ in which we don't store all the chosen numbers The key is, if we find a pair, we replace the larger one with ```n+1``` or ```k```(if ```k``` is bigger) This way, the substitute will not form a pair with any of the existing elements. For the next pair, we would use n + 2 (or k + 1), and so on. The reason why we check ```k-i<=n``` is that we don't need to find a substitute for ```k-i```, if it's larger than ```n``` We only need to find a substitute or directly use all the number between ```[1, n]``` ## Code $O(N)$ $O(1)$ ```python= class Solution: def minimumSum(self, n: int, k: int) -> int: ans = 0 last = max(n+1, k) for i in range(1, n+1): ans += i if k-i>i and k-i<=n: ans += last-(k-i) last += 1 return ans ``` $O(N)$ $O(N)$ ```python= class Solution: def minimumSum(self, n: int, k: int) -> int: nums = set() ans = 0 i = 1 while len(nums)<n: if k-i not in nums: nums.add(i) ans += i i += 1 return ans ```