正负号标记法

万无引力 WY 2017-08-10 10:30:16
各位大神,今天做了一道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;



}
}
...全文
255 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
自由自在_Yu 2017-08-11
  • 打赏
  • 举报
回复
1到n这些数和数组下标0~n-1对应起来,即数组下标+1就是1~n, 所以每一项-1 -->Math.abs(nums[i])-1就能与数组下标对应,能对应 上的取负值 运算结果为[-4, -3, -2, -7, 8, 2, -3, -1] 对应下标为 0, 1, 2, 3, 4,5, 6, 7 8和2都是正数,说明没有对应的下标 8和2对应的下标是4、5 所以下标+1 就是5、6

51,411

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧