小米-懂二进制 华为-最高分是多少

来源:互联网 发布:威纶触摸屏数据导出 编辑:程序博客网 时间:2024/05/16 11:28

小米-懂二进制

世界上有10种人,一种懂二进制,一种不懂。那么你知道两个int32整数m和n的二进制表达,有多少个位(bit)不同么?
输入例子:
1999 2299
输出例子:
7

解题思路:首先肯定是用位运算,不然运算时间一般来说是达不到要求的。然后求不同自然是异或^运算。再对结果的每一位1进行统计,采用&1然后再不停的移位。(用base左移位不能判断是否已经计算完,用res右移可以省略部分移位)

public class Solution {    /**     * 获得两个整形二进制表达位数不同的数量     *     * @param m 整数m     * @param n 整数n     * @return 整型     */    public int countBitDiff(int m, int n) {        int res=m^n;        int base=1;        int count=0;        for(int i=0;i<32;i++){            if((res&base)>0){                count++;            }            base=base<<1;        }        return count;    }}

华为-最高分是多少

题目描述
老师想知道从某某同学当中,分数最高的是多少,现在请你编程模拟老师的询问。当然,老师有时候需要更新某位同学的成绩.
输入描述:
输入包括多组测试数据。
每组输入第一行是两个正整数N和M(0 < N <= 30000,0 < M < 5000),分别代表学生的数目和操作的数目。
学生ID编号从1编到N。
第二行包含N个整数,代表这N个学生的初始成绩,其中第i个数代表ID为i的学生的成绩
接下来又M行,每一行有一个字符C(只取‘Q’或‘U’),和两个正整数A,B,当C为’Q’的时候, 表示这是一条询问操作,他询问ID从A到B(包括A,B)的学生当中,成绩最高的是多少
当C为‘U’的时候,表示这是一条更新操作,要求把ID为A的学生的成绩更改为B。
输出描述:
对于每一次询问操作,在一行里面输出最高成绩.
输入例子:
5 7
1 2 3 4 5
Q 1 5
U 3 6
Q 3 4
Q 4 5
U 4 5
U 2 9
Q 1 5
输出例子:
5
6
5
9

解题思路:基本编程题,比较简单。

import java.util.*;public class Main{    private static int[] score;    public static void main(String[] args){        Scanner sc=new Scanner(System.in);        while(sc.hasNext()){            String line=sc.nextLine();            String[] lines=line.trim().split(" ");            int stuCount=Integer.parseInt(lines[0]);            int inputCount=Integer.parseInt(lines[1]);            line=sc.nextLine();            lines=line.trim().split(" ");            score=new int[stuCount];            for(int i=0;i<stuCount;i++){                score[i]=Integer.parseInt(lines[i]);            }            for(int i=0;i<inputCount;i++){                line=sc.nextLine();                lines=line.trim().split(" ");                int x=Integer.parseInt(lines[1]);                int y=Integer.parseInt(lines[2]);                if("Q".equals(lines[0])){                    if(x>y){                        question(y-1,x-1);                    }else{                        question(x-1,y-1);                    }                }else{                    score[x-1]=y;                }            }        }    }    private static void question(int x,int y){        int max=0;        for(int i=x;i<=y;i++){            max=Math.max(max,score[i]);        }        System.out.println(max);    }}