剑指 Offer 03. 数组中重复的数字
原地交换(优解)
遍历数组,如果存在某个数不在0到n-1的范围内,返回-1。
每个数放到对应的位置上,即让 nums[i] = i
从前往后遍历数组中的所有数
- 如果对应的值不等于所在地址的值,交换值到对应的地址上,即:nums[x] = x
时间复杂度分析
每次swap操作都会将一个数放在正确的位置上,最后一次swap会将两个数同时放到正确位置上,一共只有 nn 个数和 nn 个位置,所以swap最多会进行 n−1n−1 次。所以总时间复杂度是 O(n)O(n)。