• 二进制中 1 的个数+确定一个数字是否为 2 的幂+最大化交易利润


    目录

    题目描述:

    思路分析:

    1.用Integer.toString(n,2)

     2.用Integer.bitCount可以统计2进制中1的个数

    3.用位运算

    题目描述

    输入描述

    输出描述

    输入输出样例

    最大化交易利润

    题目描述

    输入描述

    输出描述

    输入输出样例

    思路分析:


    题目描述:

    给定一个整数 xx,输出该数二进制表示中 1 的个数。

    例:9 的二进制表示为 1001,有 2 位是 1 ,所以函数返回 2。

    输入描述
    输入 x (内存空间为 32 位的整数)。

    输出描述
    第一行输出 x 二进制表示中 1 的个数。

    输入输出样例
    示例 1
    输入

    9

    输出

    2

    思路分析:

    x内存空间为 32 位的整数,int32位正好够用

    1.用Integer.toString(n,2)

    1. import java.util.Scanner;
    2. public class Main {
    3. public static void main(String[] args) {
    4. Scanner sc = new Scanner(System.in);
    5. int n=sc.nextInt();
    6. String s = Integer.toString(n,2);
    7. int ans=0;
    8. for(int i=0;i
    9. if(s.charAt(i)=='1') ans++;
    10. }
    11. System.out.println(ans);
    12. }
    13. }

     2.用Integer.bitCount可以统计2进制中1的个数

    1. import java.util.Scanner;
    2. public class Main {
    3. public static void main(String[] args) {
    4. Scanner sc = new Scanner(System.in);
    5. int n=sc.nextInt();
    6. int ans=Integer.bitCount(n);
    7. System.out.println(ans);
    8. }
    9. }

    3.用位运算

    &两边都为1才为1

    x&1 只有x的个位为1才会返回1

    比如101&1=1

            10&1=0

            1&1=0

    1. import java.util.Scanner;
    2. public class Main {
    3. public static void main(String[] args) {
    4. Scanner sc = new Scanner(System.in);
    5. int n=sc.nextInt();
    6. int ans=0;
    7. while(n>0) {
    8. if((n&1)==1) ans++;
    9. n>>=1;
    10. }
    11. System.out.println(ans);
    12. }
    13. }

    题目描述

    实现一个算法确定一个数字 N 是否为 2 的幂。

    若该数字是 2 的幂则输出 YES,否则输出 NO

    输入描述

    输入一个数字 N(1 <= N <=10^8)。

    输出描述

    输出一行,若 N 是 2 的幂则输出 YES,否则输出 NO

    输入输出样例

    示例

    输入

    8
    

    输出

    YES

    1. import java.util.Scanner;
    2. public class Main {
    3. public static void main(String[] args) {
    4. Scanner sc = new Scanner(System.in);
    5. int n=sc.nextInt();
    6. System.out.println(Integer.bitCount(n)==1?"YES":"NO");
    7. }
    8. }

    最大化交易利润

    题目描述

    实现一个算法寻找最大化股票交易利润的策略。介绍如下:

    • 股票价格每天都在变化,以数组的索引表示交易日,以数组的元素表示每天的股票价格。
    • 可以通过买入和卖出获得利润。一天只能进行一次买入或卖出操作,一次买入加卖出操作称为一次交易次数。
    • 你只能交易一次,求使得利润最大的交易策略。

    输入描述

    第一行为数字 N,表示共有 N 天。

    第二行为 N 个数字 A_iAi​,表示每天的股票价格。

    其中,1 <=N, Ai <=10^4。

    输出描述

    输出一行,为交易一次的最大利润(有可能利润为负)。

    输入输出样例

    示例

    输入

    1. 8
    2. 2 5 6 1 4 3 1 3

    输出

    4

    思路分析:

    如果你想在第x天把它卖出,那一定是在【1,x-1】中价格最低的一天把它买入

    循环遍历,当你遍历第x天,你是不是一定已经遍历过【1,x-1】,同时维护最小值。

    枚举在哪一天卖出,然后减去维护的最小值,这个最小值一定在它之前,因为我们是从前面过来的

    1. import java.util.Scanner;
    2. public class Main {
    3. public static void main(String[] args) {
    4. Scanner sc = new Scanner(System.in);
    5. int n=sc.nextInt();
    6. int[] a=new int[n];
    7. for(int i=0;i
    8. a[i]=sc.nextInt();
    9. }
    10. //利润
    11. int ans=(int)-1e4;
    12. //在这之前价格最低的时候是多少
    13. int min=(int)1e4;
    14. //时间复杂度o(n)
    15. for(int i=0;i
    16. //枚举每一天把他卖出 也就是找差最大的
    17. if(i>0) ans=Math.max(ans, a[i]-min);
    18. min=Math.min(min, a[i]);
    19. }
    20. System.out.println(ans);
    21. }
    22. }

  • 相关阅读:
    启山智软/JAVA商城
    Python 中对_call__()方法的理解
    linux驱动调试之Debugfs
    C++ 核心指南 —— 性能
    LeetCode(力扣)46. 全排列Python
    J2EE--自定义mvc增删改查
    阿里云视频点播介绍
    初学者学深度学习:7步学会 Pytorch 基础
    SQL力扣刷题七
    预告|易天光通信将亮相第24届CIOE光博会
  • 原文地址:https://blog.csdn.net/qq_58631644/article/details/128166546