列表 arr
由在范围 [1, n]
中的所有整数组成,并按严格递增排序。请你对 arr
应用下述算法:
给你整数 n
,返回 arr
最后剩下的数字。
示例 1:
输入:n = 9 输出:6 解释: arr = [1, 2, 3, 4, 5, 6, 7, 8, 9] arr = [2, 4, 6, 8] arr = [2, 6] arr = [6] |
示例 2:
输入:n = 1 输出:1 |
提示:
1 <= n <= 109
解题思路
首先想到的是模拟,即按题目描述的步骤重复删除数字,直至剩下一个数字为止。实际操作时,由于数组元素只会出现1~n,所以只需要将待删除的数字置为0或一个负数即可,不必真正删除该数字。
上面的方式每次删除数字时需要遍历一轮数组,由于每次删除剩余数组一半的元素,所以一共需要删除 log2n 次,整体算法复杂度为O(nlogn)级别,考虑到n的数量级为109级别,算法极有可能超时。