Notice: All the artical is wrote by Flex, myself.All rights reserved. Please contact me if reproduced.
First Problem:
Please forgive me, I can only solve this problem by violent way. It's true simple, just creat a HashMap in order to stock the number in array and how many times they repeated. Traverse HashMap, and find the number which repeats the most.
Following Code:
class Solution {
public int moreThanHalfNum_Solution(int[] nums) {
Map<Integer, Integer> a = new HashMap<Integer, Integer>();
for(int idx = 0;idx < nums.length;idx += 1) {
if(!a.containsKey(nums[idx])) {
a.put(nums[idx],1);
} else {
int cnt = a.get(nums[idx]);
a.put(nums[idx],cnt + 1);
}
}
int maxcnt = 0;
int maxnum = 0;
for(int key : a.keySet()) {
int cnt = a.get(key);
if(cnt > maxcnt) {
maxcnt = cnt;
maxnum = key;
}
}
return maxnum;
}
}
Second Problem:
63. 字符串中第一个只出现一次的字符 - AcWing题库
Just like problem before. It's also traverse String, than find the first letter that repeats once.
Following Code:
class Solution {
public char firstNotRepeatingChar(String s) {
Map<Character, Integer> a = new HashMap<Character, Integer>();
for(char x : s.toCharArray()) {
if(!a.containsKey(x)) {
a.put(x,1);
} else {
int cnt = a.get(x);
a.put(x,cnt + 1);
}
}
for(char x : s.toCharArray()) {
if(a.get(x) == 1) return x;
}
return '#';
}
}