面試題56 - I. 數組中數字出現的次數
//空間複雜度不滿足
class Solution {
public int[] singleNumbers(int[] nums) {
Map<Integer,Integer> map = new HashMap<>();
for(int num:nums){
map.put(num,map.getOrDefault(num,0)+1);
}
int[] arr = new int[2];
int i =0;
for(Integer a:map.keySet()){
if(map.get(a)==1){
arr[i++] = a;
}
}
return arr;
}
}
class Solution {
public int[] singleNumbers(int[] nums) {
Arrays.sort(nums);
int[] arr = new int[2];
int j = 0;
for(int i = 0;i<nums.length-1;i++){
if(nums[i]!=nums[i+1]){
arr[j++] = nums[i];
}else{
i++;
}
}
if(j==1){
arr[j++] = nums[nums.length-1];
}
return arr;
}
}
class Solution {
public int[] singleNumbers(int[] nums) {
int sum=0;
//得到異或結果,即爲不相同兩個數的異或結果sum
for(int num:nums)
sum^=num;
//得到sum的二進制的1的最低位
int flag=(-sum)∑
/*
while((k & flag) == 0) {
flag <<= 1;
}
*/
int result[]=new int[2];
//分成兩個組進行異或,每組異或後的結果就是不相同兩個數的其中之一
for(int num:nums){
if((flag&num)==0)
result[0]^=num;
else{
result[1]^=num;
}
}
return result;
}
}
面試題 01.01. 判定字符是否唯一
class Solution {
public boolean isUnique(String astr) {
for (int i=0;i<astr.length();i++){
if (astr.lastIndexOf(astr.charAt(i))!=i){
return false;
}
}
return true;
}
}
class Solution {
public boolean isUnique(String astr) {
int[] ch = new int[26];
for (int i=0;i<astr.length();i++) {
ch[astr.charAt(i)-'a'] += 1;
if (ch[astr.charAt(i)-'a']>1) {
return false;
}
}
return true;
}
}
你知道的越多,你不知道的越多。
有道無術,術尚可求,有術無道,止於術。
如有其它問題,歡迎大家留言,我們一起討論,一起學習,一起進步