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做&运算,计算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(nlog
2
k)和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,但是能通过!!!!