總結:
- 注意數組會否出界 e.g. num[-3]
class Solution {
public int findDuplicate(int[] nums) {
//time complexity less than O(n2) 表示要用指針
//用nums[i] 表示index位置, 因為數值只會出現一次, loop的時侯遇到該數值則把nums[nums[i]]變為負數 e.g.
//如再次遇到該值並且該值為負數時, return 該值
for(Integer num: nums){
if (nums[Math.abs(num)]>0){ //Math.abs(num) 來防止數組出界 e.g. 當num=3時, 因為前面的1已經將3變成-3, 所以要將下標變為正數防止數組出界
nums[Math.abs(num)]= -nums[Math.abs(num)];
}
else{
return Math.abs(num);
}
}
return 0;
}
}