题解 | #缺失的第一个正整数#

缺失的第一个正整数

http://www.nowcoder.com/practice/50ec6a5b0e4e45348544348278cdcee5

看了leetcode的空间O(1)解法自己写了遍代码,记录一下思路吧 主要是把原来数组当做hash表用的思想,由于如果数组中有空隙,解肯定在[1,n]之间,那么在数组相应的[0,n-1]位置标记这些存在的元素,比如遍历到一个4,那么就把下标为4-1=3的位置的值置为负数,置为负数这个点很巧妙,这个负数不能随意设置一个负数,必须是原来正数的相反数,因为如若不然,会篡改后面的信息。那么这就又引出了问题,数组中原来的负数怎么处理呢,答案是在上述步骤前先置为n+1,超过数组界限,这样不会修改数组中的位置信息,统一初始状态,避免置为相反数时冲突的问题。 给出java实现 public int minNumberDisappeared (int[] nums) { // Map<Integer,Integer> pos=new HashMap<>();

    // write code here
    int len=nums.length;
    for(int i=0;i<len;i++){
        if(nums[i]<=0) nums[i]=len+1;
    }
    for(int i=1;i<len+1;i++){
        int x;
        if(nums[i-1]<0) x=-nums[i-1];
        else x=nums[i-1];
        
        if(x>0 && x<len+1) nums[x-1]=-nums[x-1];
        
    }
    for(int i=0;i<len;i++){
        if(nums[i]>0) return i+1;
    }
    return len+1;
    
}
全部评论

相关推荐

不愿透露姓名的神秘牛友
06-19 14:46
和女友两个人马上毕业,现在我在鹅实习995,周六日偶尔也去北京;她在北京金融007,经常忙到后半夜,周末也没啥休息机会两个人现在都不咋聊天了,一句话隔半小时甚至半天才回。&nbsp;她是个很优秀的妹子,工作也很努力,是值得学习一辈子的人。我在努力工作求转正,即便不行至少赚到了一段不错的实习经历。已经异地了半年,接下来可能还会持续是这个状态。我们都算是对方重要的人,只是感觉看上去不是很有未来的样子。希望牛友们给点的鼓励
梦旅奇缘:很难。异地首先就已经很难了,加上妹子是金融行业,忙碌高压,对情感需求很高,而且见惯纸醉金迷,你的很多优势在她那里可能就不算什么了。这种情况下,在她们那里遇到一个能及时照顾她的人,即使那人可能很多条件不如你,你也有可能被分手。 说白了,两个卷王就不太适合在一起。因为卷王最大的优势,在另一个卷王那里就不算优势了。
点赞 评论 收藏
分享
自由水:笑死了,敢这么面试不敢让别人说
点赞 评论 收藏
分享
缒梦&独舞:这家公司是这样的,去年给我实习offer了,不过也是面着玩儿的,他周六还要去做公益志愿活动
点赞 评论 收藏
分享
06-20 15:23
门头沟学院 Java
难道你们背八股都不觉得累?现在每天背八股背的我想吐
想去大厂的土豆子:累不累都是对比出来的,八股可比高考、考研轻松多了
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

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