牛客网刷题33(2道题)

60.在其它数都出现k次的数组中找到只出现一次的数

题目链接
https://www.nowcoder.com/practice/26e46f1f5e0d48c4b9ba13fe3e8d0ec6?tpId=101&&tqId=33216&rp=5&ru=/activity/oj&qru=/ta/programmer-code-interview-guide/question-ranking

题目描述
给定一个整型数组arr和一个大于1的整数k。已知arr中只有1个数出现了一次,其他的数出现k次,请返回出现了1次的数。
输入描述
输入包含两行,第一行包含两个整数n和k(1≤n≤10 5,1≤k≤100),n代表数组arr的长度,第二行n个整数,代表数组arr,数组arr中每个数都是32位整数。

输出描述
输出一个整数,代表唯一出现1次的数。
示例1
输入
7 3
5 4 1 1 5 1 5
输出
4
备注
时间复杂度O(n)O(n),额外空间复杂度O(1)O(1)。
关键技术
数字第一次出现的位置 等于 最后一次出现的位置,则此数字出现了一次。

题目分析

  1. 获取多行数据。
  2. 把获取的字符转换成整数。
  3. 判断数字第一次出现的位置是否等于数字最后一次出现的位置。
  4. 若相等,输出此数字。
var input = readline().split(" ");
var n = parseInt(input[0]);
var k = parseInt(input[1]);
var str = readline().split(" ");
var arr = [];
for(let i=0;i<str.length;i++){
    arr.push(parseInt(str[i]));
}
var res = [];
for(let i=0;i<arr.length;i++){
    if(arr.indexOf(arr[i]) == arr.lastIndexOf(arr[i])){
        res.push(arr[i]);
    }
}
print(res[0]);

61.在其它数出现次数都为偶数的数组中找到出现次数为奇数次的数

题目链接

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

题目描述
给一个数组arr,其中只有一个数出现了奇数次,其它数出现了偶数次,打印这个数。
输入描述
输出包含两行,第一行包含一个整数n(1≤n≤10^5),代表数组arr长度,第二行有n个数,代表数组arr arr[i] 为32位整数。

输出描述
输出一个整数,代表出现次数为奇数次的那个数。
示例1
输入
5
3 1 3 1 2
输出
2
示例2
输入
3
6 6 3
输出
3
备注
时间复杂度O(n)O(n),额外空间复杂度O(1)O(1)。
关键技术
按位异或运算
题目分析

  1. 获取输入的多行数据;
  2. 相同的数字取异或为0,不同的数字取异或为1,所以arr中所有数字的异或值为出现奇数次的数字;
var n = parseInt(readline());
var arr = readline().split(' ');
var res = [];
for(let i=0;i<n;i++){
    res ^= arr[i];
}
print(res);

你可能感兴趣的:(刷题)