正负号标记法
各位大神,今天做了一道leedcode,里面使用了正负号标志法。反复思考,也不是很懂。请教大家一下这个正负号标志法。。。
该题告知有n个元素的数组,数组的所有元素介于1到n之间(包含1与n),但是 一些元素出现了两次,其他的元素都只出现一次,找出所有没有出现的数值。要求你不用额外的空间,并且在O(n)时间复杂度下解决该问题。你可以假设返回的列表不算在额外的元素中。
实例:
Input:
[4,3,2,7,8,2,3,1]
Output:
[5,6]
public class Solution
{
int j;
int i=0;
int sub;
int m;
public List<Integer> findDisappearedNumbers(int[] nums)
{
List<Integer> list=new ArrayList<Integer>();
if(nums!=null)
{
for(int i=0;i<nums.length;i++)
{
int index=Math.abs(nums[i])-1;
if(nums[index]>0)
{
nums[index]=-nums[index];
}
}
}
for(int j=0;j<nums.length;j++)
{
if(nums[j]>0)
{
list.add(j+1);
}
}
return list;
}
}