LeetCode - Easy - 169

Submission


import java.util.Arrays;

import java.util.HashMap;

import java.util.Map;

public class MajorityElement {

// 方法一:使用排序

public int majorityElement1(int[] nums) {

Arrays.sort(nums);

return nums[nums.length / 2];

}

// 方法二:使用Hashtable

public int majorityElement2(int[] nums) {

Map<Integer, Integer> myMap = new HashMap<Integer, Integer>();

// Hashtable<Integer, Integer> myMap = new Hashtable<Integer, Integer>();

int ret = 0;

for (int num : nums) {

if (!myMap.containsKey(num))

myMap.put(num, 1);

else

myMap.put(num, myMap.get(num) + 1);

if (myMap.get(num) > nums.length / 2) {

ret = num;

break;

}

}

return ret;

}

// 方法三:Moore 投票算法

public int majorityElement3(int[] nums) {

int count = 0, ret = 0;

for (int num : nums) {

if (count == 0)

ret = num;

if (num != ret)

count–;

else

count++;

}

return ret;

}

// 方法四:位操作1

public int majorityElement4_1(int[] nums) {

int[] bit = new int[32];

for (int num : nums)

for (int i = 0; i < 32; i++)

if ((num >> (31 - i) & 1) == 1)

bit[i]++;

int ret = 0;

for (int i = 0; i < 32; i++) {

bit[i] = bit[i] > nums.length / 2 ? 1 : 0;

ret += bit[i] * (1 << (31 - i));

}

return ret;

}

// 方法四:位操作2

public int majorityElement4_2(int[] nums) {

int majority = 0;

for (int i = 0, mask = 1; i < 32; i++, mask <<= 1) {

int bits = 0;

for (int num : nums) {

if ((num & mask) > 0) {

bits++;

}

}

if (bits > nums.length / 2) {

majority |= mask;

}

}

return majority;

}

// 方法五:概率计算

public int majorityElement5(int[] nums) {

int n = nums.length, candidate = 0;

while (true) {

candidate = nums[(int) (Math.random() * n)];

int counter = 0;

for (int num : nums) {

if (num == candidate) {

counter++;

}

}

if (counter > n / 2) {

break;

}

}

return candidate;

}

// 方法六:分治算法

public int majorityElement6(int[] nums) {

return findMajority(nums, 0, nums.length - 1);

}

private int findMajority(int[] nums, int low, int high) {

if (low == high)

return nums[low];

int mid = low + (high - low) / 2;

int left = findMajority(nums, low, mid);

int right = findMajority(nums, mid + 1, high);

if (left == right)

return left;

int countLeft = getFreq(nums, left, low, mid);

int countRight = getFreq(nums, right, mid + 1, high);

if (countLeft > countRight)

return left;

return right;

}

private int getFreq(int[] nums, int val, int low, int high) {

int res = 0;

for (int i = low; i <= high; i++) {

if (nums[i] == val)

res++;

}

return res;

}

}

最后

小编利用空余时间整理了一份《MySQL性能调优手册》,初衷也很简单,就是希望能够帮助到大家,减轻大家的负担和节省时间。

关于这个,给大家看一份学习大纲(PDF)文件,每一个分支里面会有详细的介绍。

image

这里都是以图片形式展示介绍,如要下载原文件以及更多的性能调优笔记(MySQL+Tomcat+JVM)!
l)

res++;

}

return res;

}

}

最后

小编利用空余时间整理了一份《MySQL性能调优手册》,初衷也很简单,就是希望能够帮助到大家,减轻大家的负担和节省时间。

关于这个,给大家看一份学习大纲(PDF)文件,每一个分支里面会有详细的介绍。

[外链图片转存中…(img-grn4G1YM-1719279641967)]

这里都是以图片形式展示介绍,如要下载原文件以及更多的性能调优笔记(MySQL+Tomcat+JVM)!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值