牛客网刷题31(2道题)
57.整数的二进制数表达中有多少个1
题目链接
题目描述
给定一个32位整数n,返回该整数二进制形式1的个数。
输入描述:
输入一个整数,代表n,n为32为整数。
输出描述:
输出一个整数,代表n的二进制表达式中1的个数。
示例1
输入
1
输出
1
示例2
输入
-2
输出
31
备注:
时间复杂度O(1)O(1),额外空间复杂度O(1)O(1)。
重难点
- 进制转换
- 位运算
题目分析
- 把输入的数据转成二进制字符串。
- 把转换后的二进制字符串与1做&运算,计算1的个数。
- 把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个数
题目链接
题目描述
给定一个整型数组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)。
重难点
- js获取多行输入。
- 字符串分割
- sort数值排序。
题目分析
- 获取输入的多行数据;
- 用"\n"分割成两行数据;
- 分别分离出n,k,arr;
- sort数值排序;
- 找出最小的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,但是能通过!!!!