网易有道一面java

前面都是基础的问题,直接略过

代码题1.
给定数组arr,还有一个target,让你找出数组中两个数让他们的和等于target,找出所有的组合
开始说了排序+首尾指针(O(nlogn))
面试官问有O(n)的吗?
hash表实现,说了思路没让手撕

代码题2.
数组arr,一个树只出现了一次,其他的数出现了k次,求出这一个数
限定时间O(n),空间O(1)

统计二进制每一位的1的次数,最后的结果就是出现一次的数
后来自己有些了代码,贴上来

    public static int findTheOne(int[] arr,int k){
        int res = 0;
        int temp = 1;
        int max = Integer.MIN_VALUE;
        for (int i = 0; i < arr.length; i++) {
            max = Math.max(max,arr[i]);
        }
        int length = arr.length;
        while (max > 0){
            int sum = 0;
            for (int i = 0; i < length; i++) {
                if ((arr[i] & 1) == 1){
                    ++sum;
                }
                arr[i] = arr[i] >> 1;
            }
            if (sum % k == 1){
                res += temp;
            }
            temp = temp << 1;
            max = max >> 1;
        }
        return res;
    }

给了提示之后写了代码

#面经##校招##网易##Java工程师#
全部评论
请问JAVA基础面了啥
点赞 回复 分享
发布于 2020-08-20 21:47
二面通知了说一声
点赞 回复 分享
发布于 2020-08-21 08:49
数据要是负数不行吧,findTheOne(new int[]{-2, -2, 1, 1, -3, 1, -3, -3, -4, -2}, 3) ,返回0,实际-4
点赞 回复 分享
发布于 2020-08-21 15:14

相关推荐

牛客963010790号:为什么还要收藏
点赞 评论 收藏
分享
牛客339922477号:都不用reverse,直接-1。一行。啥送分题
点赞 评论 收藏
分享
3 18 评论
分享
牛客网
牛客企业服务