LeetCode?????????-Majority Element???Java?????????
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode?????????-Majority Element???Java?????????相关的知识,希望对你有一定的参考价值。
?????????return oid integer 64????????? ?????? ???????????? nano result ??????
?????????????????????181???????????????183?????????
01 ???????????????
??????????????????LeetCode????????????Easy????????????40?????????????????????169?????????????????????n?????????????????????????????????????????????n/2???????????????????????????????????????????????????????????????????????????????????????
?????????[3,2,3]
?????????3
?????????[2,2,1,1,1,2,2]
?????????2
????????????????????????????????????eclipse???jdk??????????????????1.8????????????win7 64??????????????????Java????????????????????????
02 ???????????????
?????????????????????????????????????????????for???????????????n-1??????????????????count??????????????????????????????
?????????i???????????????i+1????????????????????????i?????????????????????2?????????count??????????????????????????????1??????????????????count????????????n/2???????????????????????????i????????????
?????????i???????????????i+1???????????????????????????????????????i????????????0?????????i???????????????i-1???????????????????????????????????????count???1???????????????count????????????n/2???????????????????????????i??????????????????????????????count??????0???????????????????????????
??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????n/2???????????????????????????????????????????????????
public int majorityElement(int[] nums) {
int size = nums.length / 2;
int result = nums[nums.length - 1];
Arrays.sort(nums);
int count = 0;
for (int i = 0; i < nums.length - 1; i++) {
if (nums[i] == nums[i + 1]) {
if (i == nums.length - 2) {
count++;
}
count++;
if (count > size) {
return nums[i];
}
} else {
if (i > 0 && nums[i] == nums[i - 1]) {
count++;
if (count > size) {
return nums[i];
}
} else {
count = 0;
}
}
}
return result;
}
??????????????????????????????O(n log(n))+O(n)?????????????????????O(1)???
03 ???????????????
???????????????Arrays????????????????????????????????????????????????????????????????????????n/2?????????????????????????????????????????????????????????????????????????????????????????????nums[n/2]????????????????????????
????????????????????????????????????????????????????????????????????????4???????????????????????????nums[2]??????????????????????????????????????????????????????nums[1]???nums[0]??????????????????????????????????????????nums[0]??????nums[n/2 - 1]?????????
public int majorityElement2(int[] nums) {
int len = nums.length;
if(len == 1) return nums[0];
Arrays.sort(nums);
if (len%2 == 0 && nums[0] == nums[len/2 - 1]) {
return nums[0];
}
return nums[len/2];
}
??????????????????????????????O(n log(n))?????????????????????O(1)???
04 ???????????????
??????????????????candidate???????????????????????????n/2??????????????????????????????count?????????????????????.
?????????????????????count????????????0?????????0??????????????????????????????candidate????????????????????????????????????candidate?????????????????????count???1????????????1?????????????????????????????????
?????????????????????????????????????????????????????????1??????????????????1???????????????count?????????0???????????????????????????????????????????????????????????????count??????0??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
public int majorityElement3(int[] nums) {
int count = 0;
int candidate = 0;
for (int i = 0; i < nums.length; i++) {
if (count == 0) {
candidate = nums[i];
}
if (nums[i] == candidate) {
count++;
} else {
count--;
}
}
return candidate;
}
??????????????????????????????O(n)?????????????????????O(1)???
05 ???????????????
??????HashMap???key?????????????????????value??????????????????????????????????????????value?????????n/2????????????key????????????????????????????????????
public int majorityElement4(int[] nums) {
Map<Integer, Integer> map = new HashMap<>();
int freq = 0;
for (int i = 0; i < nums.length; i++) {
if (map.containsKey(nums[i])) {
freq = map.get(nums[i]) + 1;
map.put(nums[i], freq);
} else {
freq = 1;
map.put(nums[i], 1);
}
if (freq > nums.length / 2)
return nums[i];
}
return nums[nums.length-1];
}
??????????????????????????????O(n)?????????????????????O(n)???
06 ???????????????
?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
public static void main(String[] args) {
Easy_169_MajorityElement instance = new Easy_169_MajorityElement();
int[] arg = { 3, 2, 3, 1, 2, 3, 2, 3};
long start = System.nanoTime();
int result = instance.majorityElement(arg);
long end = System.nanoTime();
System.out.println("majorityElement---??????:" + Arrays.toString(arg) + " , ??????:" + result + " , ??????:" + ((end - start) / 1000) + "??????");
int[] arg2 = { 3, 2, 3, 1, 2, 3, 2, 3};
long start2 = System.nanoTime();
int result2 = instance.majorityElement2(arg2);
long end2 = System.nanoTime();
System.out.println("majorityElement2---??????:" + Arrays.toString(arg2) + " , ??????:" + result2 + " , ??????:" + ((end2 - start2) / 1000) + "??????");
int[] arg3 = { 3, 2, 3, 1, 2, 3, 2, 3};
long start3 = System.nanoTime();
int result3 = instance.majorityElement3(arg3);
long end3 = System.nanoTime();
System.out.println("majorityElement3---??????:" + Arrays.toString(arg3) + " , ??????:" + result3 + " , ??????:" + ((end3 - start3) / 1000) + "??????");
int[] arg4 = { 3, 2, 3, 1, 2, 3, 2, 3};
long start4 = System.nanoTime();
int result4 = instance.majorityElement4(arg4);
long end4 = System.nanoTime();
System.out.println("majorityElement4---??????:" + Arrays.toString(arg4) + " , ??????:" + result4 + " , ??????:" + ((end4 - start4) / 1000) + "??????");
}
?????????????????????
majorityElement---??????:[1, 2, 2, 2, 3, 3, 3, 3] , ??????:3 , ??????:211??????
majorityElement2---??????:[1, 2, 2, 2, 3, 3, 3, 3] , ??????:3 , ??????:5??????
majorityElement3---??????:[3, 2, 3, 1, 2, 3, 2, 3] , ??????:2 , ??????:4??????
majorityElement4---??????:[3, 2, 3, 1, 2, 3, 2, 3] , ??????:3 , ??????:62??????
07 ??????
??????????????????????????????????????????????????????????????????40+????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
以上是关于LeetCode?????????-Majority Element???Java?????????的主要内容,如果未能解决你的问题,请参考以下文章
leetcode 352 & leetcode 239 & leetcode 295 & leetcode 53 & leetcode 209