/*     由于数组是 从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     */