目录
2.用Integer.bitCount可以统计2进制中1的个数
给定一个整数 xx,输出该数二进制表示中 1 的个数。
例:9 的二进制表示为 1001,有 2 位是 1 ,所以函数返回 2。
输入描述
输入 x (内存空间为 32 位的整数)。
输出描述
第一行输出 x 二进制表示中 1 的个数。
输入输出样例
示例 1
输入
9
输出
2
x内存空间为 32 位的整数,int32位正好够用
- import java.util.Scanner;
-
- public class Main {
- public static void main(String[] args) {
- Scanner sc = new Scanner(System.in);
- int n=sc.nextInt();
- String s = Integer.toString(n,2);
- int ans=0;
- for(int i=0;i
- if(s.charAt(i)=='1') ans++;
- }
- System.out.println(ans);
- }
- }
2.用Integer.bitCount可以统计2进制中1的个数
- import java.util.Scanner;
- public class Main {
- public static void main(String[] args) {
- Scanner sc = new Scanner(System.in);
- int n=sc.nextInt();
- int ans=Integer.bitCount(n);
- System.out.println(ans);
- }
- }
3.用位运算
&两边都为1才为1
x&1 只有x的个位为1才会返回1
比如101&1=1
10&1=0
1&1=0
- import java.util.Scanner;
-
- public class Main {
- public static void main(String[] args) {
- Scanner sc = new Scanner(System.in);
- int n=sc.nextInt();
- int ans=0;
- while(n>0) {
- if((n&1)==1) ans++;
- n>>=1;
- }
- System.out.println(ans);
- }
- }
题目描述
实现一个算法确定一个数字 N 是否为 2 的幂。
若该数字是 2 的幂则输出 YES,否则输出 NO。
输入描述
输入一个数字 N(1 <= N <=10^8)。
输出描述
输出一行,若 N 是 2 的幂则输出 YES,否则输出 NO。
输入输出样例
示例
输入
8
输出
YES
- import java.util.Scanner;
-
- public class Main {
- public static void main(String[] args) {
- Scanner sc = new Scanner(System.in);
- int n=sc.nextInt();
- System.out.println(Integer.bitCount(n)==1?"YES":"NO");
- }
- }
最大化交易利润
题目描述
实现一个算法寻找最大化股票交易利润的策略。介绍如下:
- 股票价格每天都在变化,以数组的索引表示交易日,以数组的元素表示每天的股票价格。
- 可以通过买入和卖出获得利润。一天只能进行一次买入或卖出操作,一次买入加卖出操作称为一次交易次数。
- 你只能交易一次,求使得利润最大的交易策略。
输入描述
第一行为数字 N,表示共有 N 天。
第二行为 N 个数字 A_iAi,表示每天的股票价格。
其中,1 <=N, Ai <=10^4。
输出描述
输出一行,为交易一次的最大利润(有可能利润为负)。
输入输出样例
示例
输入
- 8
- 2 5 6 1 4 3 1 3
输出
4
思路分析:
如果你想在第x天把它卖出,那一定是在【1,x-1】中价格最低的一天把它买入
循环遍历,当你遍历第x天,你是不是一定已经遍历过【1,x-1】,同时维护最小值。
枚举在哪一天卖出,然后减去维护的最小值,这个最小值一定在它之前,因为我们是从前面过来的
- import java.util.Scanner;
-
- public class Main {
- public static void main(String[] args) {
- Scanner sc = new Scanner(System.in);
- int n=sc.nextInt();
- int[] a=new int[n];
- for(int i=0;i
- a[i]=sc.nextInt();
- }
- //利润
- int ans=(int)-1e4;
- //在这之前价格最低的时候是多少
- int min=(int)1e4;
- //时间复杂度o(n)
- for(int i=0;i
- //枚举每一天把他卖出 也就是找差最大的
- if(i>0) ans=Math.max(ans, a[i]-min);
- min=Math.min(min, a[i]);
- }
- System.out.println(ans);
- }
- }
-
相关阅读:
启山智软/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