<<代码思路进阶>>题你会?面试为什么不过?看这两个题你就知道了 ###一个优秀程序员必备###

简介: <<代码思路进阶>>题你会?面试为什么不过?看这两个题你就知道了 ###一个优秀程序员必备###

第一题:一个二进制数中1的个数

1.基础解法,我想我们都会对的循环&1右移

思路:与1按位或 然后右移循环,32次;

a5c3d6e8a4d24799ac3e3c037e12a7ec.jpg

看代码:

public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int a = scanner.nextInt();//输入一个数
        int count = 0;//用来存放1的数目
        for(int i=0;i<32;i++){
            if((a&1)==1){
                count++;
            }
            a>>=1;//每次a右移一下判断另一个位
        }
        System.out.println(a+"的二进制位中1的个数是:"+count);
    }

2.思路进阶:通常小的数高位都是,循环32次没有必要,我们可以按照这个思路增加代码效率

看代码:

public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int a = scanner.nextInt();//输入一个数
        int count = 0;//用来存放1的数目
        for(int i=0;i<32;i++){
            if((a&1)==1){
                count++;
            }
            a>>=1;//每次a右移一下判断另一个位
            if(a==0){//a==0的适合就没有二进制位为1的数直接break就行
                break;
            }
        }
        System.out.println(a+"的二进制位中1的个数是:"+count);
    }

3.最优解

思路:我们拿7举例子,我们只需要每次跟自己小1的数进行按位与,这样每次会与掉一个1         我们只需要求出等于0的适合按位与了多少次,这样再进阶思路的基础上又简化了代码


c1055555a28d4265a5c48f7619c31a3c.jpg


看代码:

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int a = scanner.nextInt();//输入一个数
        int count = 0;//用来存放1的数目
        while(a!=0){
            a = a & (a-1);
            count++;
        }
        System.out.println(count);
    }

此方法的一个百度面试题:


判断一个正整数是不是2的k次方?你的第一思路是什么?就让他除以2吗?笨方法你肯定能做出来,但你肯定也没有回答到面试官的心里!!!!


思路:2的k次方有那些数??1  2  4  8  16  32  64.......有没有发现什么?他们的二进制位都只有一个1,那我们就可以通过上面的方法破解了!让面试官拍案叫绝!


上代码:

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int a = scanner.nextInt();//输入一个数
        if(0==( a&(a-1)  ) ){//如果他不是2的k次方,那么他&之后一定不是0
                            //只有二进制位只有一个1的数的&一次就会变成0
            System.out.println("这个数是2的k次方");
        }
    }

第二题:求出一个数的每一位是几

1.普通人

    public static void main(String[] args) {
        n=1234;
        int a = 1234/1000;//求出1
        int b = (n-a*1000)/100;//求出2
        int c = (n-a*1000-a*100)/10;//求出3
        int d = a%10;//求出4
    }

2.进阶,你有没有想过 你不知道这是几位数的时候怎么办??

思路:      第一步,求出这是一个几位数,用除10的方法

                第二步,求出每一位是几?求余10

               将两步结合!!!看代码:

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int a = scanner.nextInt();//假设a=1234
        int tmp=a;//找一个替罪羊,防止a的值被修改
        while(tmp!=0){//tmp==0代表每一位都已经输出了
            System.out.println(tmp%10+" ");//求出4
            tmp/=10;//将4去掉,tmp变成了123
        }
    }
相关文章
|
4月前
|
Java 编译器 C++
【Java基础面试一】、为什么Java代码可以实现一次编写、到处运行?
这篇文章解释了Java能够实现“一次编写,到处运行”的原因,主要归功于Java虚拟机(JVM),它能够在不同平台上将Java源代码编译成的字节码转换成对应平台的机器码,实现跨平台运行。
【Java基础面试一】、为什么Java代码可以实现一次编写、到处运行?
|
7月前
|
开发工具 Python 容器
2024年最全python进阶系列- 04 集合(1),面试高频问题回答
2024年最全python进阶系列- 04 集合(1),面试高频问题回答
2024年最全python进阶系列- 04 集合(1),面试高频问题回答
|
7月前
|
数据采集 关系型数据库 MySQL
2024年最全python进阶系列- 04 集合,2024年最新哈希表 面试
2024年最全python进阶系列- 04 集合,2024年最新哈希表 面试
|
4月前
|
存储 缓存 Java
面试问Spring循环依赖?今天通过代码调试让你记住
该文章讨论了Spring框架中循环依赖的概念,并通过代码示例帮助读者理解这一概念。
面试问Spring循环依赖?今天通过代码调试让你记住
|
4月前
|
JavaScript 前端开发 程序员
JS小白请看!一招让你的面试成功率大大提高——规范代码
JS小白请看!一招让你的面试成功率大大提高——规范代码
|
7月前
|
存储 算法 安全
Java高级进阶面试总结(全面,实时更新)
Java高级进阶面试总结(全面,实时更新)
|
6月前
|
存储 算法 Java
面试高频算法题汇总「图文解析 + 教学视频 + 范例代码」之 二分 + 哈希表 + 堆 + 优先队列 合集
面试高频算法题汇总「图文解析 + 教学视频 + 范例代码」之 二分 + 哈希表 + 堆 + 优先队列 合集
|
7月前
|
数据采集 数据挖掘 Python
最全妙不可言。写出优雅的 Python 代码的七条重要技巧,2024年最新被面试官怼了还有戏吗
最全妙不可言。写出优雅的 Python 代码的七条重要技巧,2024年最新被面试官怼了还有戏吗
|
7月前
|
数据采集 XML 程序员
最新用Python做垃圾分类_python垃圾分类代码用key和format,5年经验Python程序员面试27天
最新用Python做垃圾分类_python垃圾分类代码用key和format,5年经验Python程序员面试27天
最新用Python做垃圾分类_python垃圾分类代码用key和format,5年经验Python程序员面试27天
|
7月前
|
数据采集 机器学习/深度学习 人工智能
最新用python代码画爱心,来自程序猿的浪漫~_python画爱心代码(1),2024年最新面试简历模板免费
最新用python代码画爱心,来自程序猿的浪漫~_python画爱心代码(1),2024年最新面试简历模板免费
最新用python代码画爱心,来自程序猿的浪漫~_python画爱心代码(1),2024年最新面试简历模板免费