北大博士被吉利连拒三次。。

科技   2024-11-13 15:15   广东  

大家好,我就是那个在B站讲算法的「华南溜达虎」。

今天看到一位北大的应届博士被最想去的吉利三重爆杀,三次都是挂在简历初筛,感觉很崩溃,表示还不如学习差一点,对自己的期望低一点,过去的成绩给了自己太多的期望,有一种高高举起被重重砸下的感觉。

评论区好几个北大的同学表示秋招至今也是0offer,自己都不敢抱怨,一抱怨别人就说是在贩卖焦虑。还有些同学说这跟专业有很大关系,有些专业就是为了扩招设立的,根本就没有对口的岗位,选个好专业比选学校更重要。

25届秋招已经开始了,我组织了一个秋招群,大家可以交流学习心得、面试经验,分享工作机会,有啥问题也可以在群里咨询。在群里我整理了一百多家已经启动秋招企业的文档,以及投递入口,每天都会更新,大家只要按照这个文档海投就可以了

大家互帮互助相信一定可以拿下秋招!计算机相关专业的同学可以 点击底部的「阅读原文」 加群。

言归正传,今天我们来分享一道高频面试题「位1的个数」。

题目描述

编写一个函数,输入是一个无符号整数 (以二进制串的形式),返回其二进制表达式中数字位数为 1 的个数(也被称为汉明重量)。

思路解析

方法一

定义res保存1的个数。对于无符号整数n,统计其中1的个数步骤如下:

  1. 如果n != 0n对应二进制的最右边一位如果是1res++,进入步骤2。否则,返回res
  2. n对应的二进制向右移动一位,进入步骤1

关键在于如何获取n对应二进制的最右边一位和怎样n对应的二进制向右移一位

获取n对应二进制最右面一位有两种方式:

  1. n1进行与运算n & 1可以获取n对应二进制的最右面一位。
  2. n2取余n % 2即可获取n对应二进制的最右面一位。

n对应的二进制右移一位有两种方式:

  1. 直接使用编程语言自带的右移符号,比如c++可以写为n >> 1
  2. n / 2 也可以将n对应的二进制右移一位。

C++代码

class Solution {
public:
    int hammingWeight(uint32_t n) {
        int res = 0;
        while(n) {
           //获取n对应二进制最右边一位
           if (n % 2) {
               ++res;
           }
           //n对应的二进制右移一位
           n = n / 2;
        }
        return res;
    } 
};

python代码

class Solution(object):
    def hammingWeight(self, n):
        """
        :type n: int
        :rtype: int
        """

        res = 0
        while n:
            # 获取 n 对应二进制最右边一位
            if n % 2:
                res += 1
            # n 对应的二进制右移一位
            n = n // 2
        return res

方法二

定义res保存1的个数。对于无符号整数n,统计其中1的个数步骤如下:

  1. 如果n != 0res++,进入步骤2。否则,返回res
  2. n = n & (n - 1),进入步骤1

n & (n - 1)其实就是将n对应的二进制最右边值为1bit位置为0

在纸上继续按照上面步骤模拟一遍,会帮助大家更好的理解。

C++代码

class Solution {
public:
    int hammingWeight(uint32_t n) {
        int res = 0;
        while(n) {
            ++res;
            //n对应二进制最右边不为零的bit位置为零
            n = n&(n-1);
        }
        return res;
    } 
};

python代码

class Solution(object):
    def hammingWeight(self, n):
        """
        :type n: int
        :rtype: int
        """

        res = 0
        while n:
            res += 1
            # n 对应二进制最右边不为零的 bit 位置为零
            n &= n - 1
        return res

复杂度分析

时间复杂度: 两种方法都是O(1),因为二进制最长为32位。

空间复杂度: 两种方法都是O(1),只使用了几个整型变量。

号外

经常使用leetcode会员的同学可以使用我的优惠通道啦!

https://leetcode.cn/premium/?promoChannel=ldtiger ,年度会员有效期比官网多俩月,季度会员有效期比官网多两个星期,还有专属福利,需要的读者朋友可以找我了解。

今天的分享就到这里,希望大家能有所收获!

字节三面都过了,但是offer我拒掉了。。

又一位top2的同学被开。。

本来想拒绝字节的,但是他给的实在太多了。。

京东开奖了,我又犹豫了。。

在华为想休息一天太难了。。

编程网事
曾就职于BAT的互联网大厂程序员。个人网站:ldtiger.com
 最新文章