前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >二分查找一>0~n-1中缺失的数字(点名)

二分查找一>0~n-1中缺失的数字(点名)

作者头像
用户11305962
发布2024-10-12 12:02:30
750
发布2024-10-12 12:02:30
举报
文章被收录于专栏:学习

1.题目: 

2.解析: 方法一:用哈希表:记录存在的数字,找到哈希表为空的数字输出

代码语言:javascript
复制
Set<Integer> set = new HashSet<>();
        for(int x : records) set.add(x);

        for(int i = 0; i < set.size(); i++){
        if(!set.contains(i)) return i;
        }
        return set.size();

方法二:位运算异或 

代码语言:javascript
复制
int ret = 0;
        for (int i = 0; i < records.length; i++) {
            ret ^= records[i];
            ret ^= i + 1;
        }

        return ret;

方法三:直接遍历

代码语言:javascript
复制
int ret = 0;
        for(int i = 0; i < records.length; i++){
            if(records[i] != i) return i;
        }
        return records.length;

方法四:二分查找: 

注意:特殊情况整个数组元素及对应下标都一样时

代码语言:javascript
复制
        int left = 0,right = records.length-1;
        while(left < right){
            int mid = left + (right - left) / 2;
            if(records[mid] == mid) left = mid+1;
            else right = mid;
        }
        
        //特殊情况:整个数组元素及对应下标都一样时
        return records[left] == left ? left+1 : left;
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-10-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档