牛客网刷题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(nlog
2​
k)和O(n),额外空间复杂度O(n)O(n)。

重难点

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

题目分析

  1. 获取输入的多行数据;
  2. 用"\n"分割成两行数据;
  3. 分别分离出n,k,arr;
  4. sort数值排序;
  5. 找出最小的k个整数。
var input;
var str ='';
while(input = readline()){
      str += input + "\n";
}
var num = str.split('\n');
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,但是能通过!!!!
在这里插入图片描述

发布了75 篇原创文章 · 获赞 4 · 访问量 3117

猜你喜欢

转载自blog.csdn.net/weixin_41796393/article/details/104614647