牛客网刷题31(2道题)

57.整数的二进制数表达中有多少个1

题目链接

https://www.nowcoder.com/practice/05b5d4f3a2a944fd9f33c47d13fad271?tpId=101&&tqId=33213&rp=5&ru=/activity/oj&qru=/ta/programmer-code-interview-guide/question-ranking

题目描述

给定一个32位整数n,返回该整数二进制形式1的个数。

输入描述:

输入一个整数,代表n,n为32为整数。

输出描述:

输出一个整数,代表n的二进制表达式中1的个数。
示例1

输入

1

输出

1
示例2

输入

-2

输出

31

备注:

时间复杂度O(1)O(1),额外空间复杂度O(1)O(1)。

重难点

  1. 进制转换
  2. 位运算

题目分析

  1. 把输入的数据转成二进制字符串。
  2. 把转换后的二进制字符串与1做&运算,计算1的个数。
  3. 把n右移1位,重复步骤2, 共执行32次。
var input;
while(input = readline()){
    var num = input.toString(2);
    var res = 0;
    let i = 32;
    while(i-- > 0){
        res += (num & 1);
        num >>= 1;
    }
   console.log(res);
}

58.找到无序数组中最小的k个数

题目链接

https://www.nowcoder.com/practice/b3c88bb9acda4d0cb6a2f50e45739332?tpId=101&&tqId=33220&rp=5&ru=/activity/oj&qru=/ta/programmer-code-interview-guide/question-ranking

题目描述

给定一个整型数组arr,找到其中最小的k个数。

输入描述:

输入包含两行,第一行包含两个整数n和k(1≤k≤n≤10^5),代表数组arr的长度第二行包含n个整数,代表数组arr(1≤arr[i]≤10^9)。

输出描述:

输出包含一行,k个整数,代表数组中最小的k个整数。
示例1

输入

5 3
3 5 1 5 2

输出

3 1 2

备注:

时间复杂度O(nlog_2k)和O(n)O(nlog2k)O(n),额外空间复杂度O(n)O(n)。

重难点

  1. js获取多行输入。
  2. 字符串分割
  3. sort数值排序。

题目分析

  1. 获取输入的多行数据;
  2. 用" "分割成两行数据;
  3. 分别分离出n,k,arr;
  4. sort数值排序;
  5. 找出最小的k个整数。
var input;
var str ='';
while(input = readline()){
      str += input + "
";
}
var num = str.split('
');
let n = num[0].split(' ')[0];
let k = num[0].split(' ')[1];
let arr = num[1].split(' ');
arr.sort(function(a,b){
    return a-b;
});
let res = [];
for(let i=0;i<k;i++){
    res += arr[i]+' ';
}
print(res);

PS:这道题给出的输入输出示例中虽然是按输入顺序输出最小k个数,即:3 1 2,我实际的输出是:1 2 3,但是能通过!!!!

 

 
原文地址:https://www.cnblogs.com/liu-xin1995/p/12396452.html