/* 由于数组是 从n开头的m+1 /m -1 个数 M+1意味着重复, m-1意味着缺失 【重复的找法】: 1.【何时重复】: 假如数组的按照顺序排好的,那么只要看数组下标和当前数组的值的关系就好了: 如是[0,1,2,3] 那么index = 0 时候就应该是 0 换算到题目上就是: data[I] = data[data[i] -n] 意味着出现了重复 举例: [2,3,5,4,3,6] 此时 n = 2; data[4] = 3 data[data[4] -2] = data[3 -2] = data[1] 也就是如果以 2开头, 那么意味着3应该在data[1]的位置上,所以有 else if (data[i] == data[cur]) { System.out.println("duplicate is: " + data[i]); break; } 2. data[i] = i,意味着在对的位置上,不需要换位置,放在原位即可,后续如果遇到了重复可以和这个位置上的数比较 3. 如果遇到了位置不对的情况时,需要做交换,把数字放到对的位置上 【缺失的找法】: 利用数学特性 a^a = 0 0^a = a 假设存在缺失,举例: [3,5,6,7,8] data[i] ^ n++ 3(data值)^3(角标)^5^4^6^5^7^6^8^7^8(数组本身长度) = 4 */
点赞 15

相关推荐

牛客网
牛客网在线编程
牛客网题解
牛客企业服务