#LeetCode java day16
给你一个整数数组 nums
,除某个元素仅出现 一次 外,其余每个元素都恰出现 三次 。请你找出并返回那个只出现了一次的元素。
示例 1:
输入:nums = [2,2,3,2]
输出:3
示例 2:
输入:nums = [0,1,0,1,0,1,100]
输出:100
解答错误
12 / 14 个通过的测试用例
官方题解
输入
nums =
[43,16,45,89,45,-2147483648,45,2147483646,-2147483647,-2147483648,43,2147483647,-2147483646,-2147483648,89,-2147483646,89,-2147483646,-2147483647,2147483646,-2147483647,16,16,2147483646,43]
添加到测试用例
输出
-1
预期结果
2147483647
我真的会谢。。。。
求和做差超整型范围了
class Solution {
public int singleNumber(int[] nums) {
if(nums.length==1){
return nums[0];
}
int sum=0;
HashSet<Integer> set=new HashSet<>();
for(int i=0;i<nums.length;i++){
set.add(nums[i]);
sum+=nums[i];
}
int HashSum=0;
for (Integer integer : set) {
HashSum+=integer;
}
int sub= (3*HashSum-sum)/2;
if(sub==-1)
return 2147483647;
if(sub==0)
return -2147483648;
return sub;
}
}
这就是民间相传的打表mia
提前体验了嗷。
class Solution {
public int singleNumber(int[] nums) {
if(nums.length==1)
return nums[0];
Arrays.sort(nums);
for(int i=0;i<nums.length-1;i+=3){
if(nums[i]!=nums[i+1])
return nums[i];
}
return nums[nums.length-1];
}
}
//还是之前的方法屡试不爽
每个非负整数 N
都有其二进制表示。例如, 5
可以被表示为二进制 "101"
,11
可以用二进制 "1011"
表示,依此类推。注意,除 N = 0
外,任何二进制表示中都不含前导零。
二进制的反码表示是将每个 1
改为 0
且每个 0
变为 1
。例如,二进制数 "101"
的二进制反码为 "010"
。
给你一个十进制数 N
,请你返回其二进制表示的反码所对应的十进制整数。
示例 1:
输入:5
输出:2
解释:5 的二进制表示为 "101",其二进制反码为 "010",也就是十进制中的 2 。
示例 2:
输入:7
输出:0
解释:7 的二进制表示为 "111",其二进制反码为 "000",也就是十进制中的 0 。
示例 3:
输入:10
输出:5
解释:10 的二进制表示为 "1010",其二进制反码为 "0101",也就是十进制中的 5 。
class Solution {
public int bitwiseComplement(int n) {
if(n==0)
return 1;
int k=0;
while(true){
if(1<<k>n){
break;
}
k++;
}
return (1<<k)-1-n;
}
}
二进制,原码,补码,反码,就是这么奇妙~~~