class Solution {
public int majorityElement(int[] nums) {
int num = nums[0];
int cnt = 1;
for (int i=1;i<nums.length;i++)
{ // 凡是遇到和当前次数最多的数字不同的数字,cnt就减一
if (num == nums[i])
{
cnt++;
}
else if(cnt == 0 && num != nums[i])
{
num = nums[i];
cnt++;
}
else
{
cnt--;
}
if (cnt == 0)
num = nums[i];
}
return num;
}
}
class Solution {
public int majorityElement(int[] nums) {
if(nums.length<2) return nums[0];
int x = nums[0];
int sum = 1;
for(int i=1;i<nums.length;i++){
if(sum==0){
x = nums[i];
sum = 1;
}else{
if(x==nums[i]){
sum++;
}else{
sum--;
}
}
}
return x;
}
}
“`c++
//时间O(n),空间O(n/2)
//哈希表
class Solution {
public:
int majorityElement(vector& nums) {
unordered_map hash;
int res = 0, n = nums.size();
for(int i = 0; i n/2)
res = nums[i];
}
return res;
}
};
function majorityElement(nums: number[]): number {
let vote = 0, val = 0;
for (let num of nums) {
if (vote === 0) val = num;
vote += (num === val ? 1 : -1);
}
return val;
};
共以下 18 个回答
c++ 代码 哈希表& nums) {
class Solution {
public:
int majorityElement(vector
map<int,int> cu;
int r=0;
for(int i=0;i<nums.size();i++)
{
cu[nums[i]]++;
if( cu[nums[i]]>nums.size()/2)
return nums[i];
}
return r;
}
};
代码
“`c++& nums) { hash; n/2)
//时间O(n),空间O(n/2)
//哈希表
class Solution {
public:
int majorityElement(vector
unordered_map
int res = 0, n = nums.size();
for(int i = 0; i
res = nums[i];
}
return res;
}
};
more投票法
暴力
class Solution {
public int majorityElement(int[] nums) {
//超过一般 可以用一个变量记录 值和出现次数 这个数出现一半 和出现一次的抵消 最后剩的 肯定是他
int result =nums[0];
int count =1;
for(int i=1;i<nums.length;i++)
{
if(nums[i]result)
{
count++;
}else
{
count–;
}
if(count0)
{
result=nums[i];
count++;
}
}
return result;
}
}
摩尔计数法
时间复杂度:O(n)
空间复杂度:O(1)
以上是代码
7.29
Day20:下面是代码
消消乐,前后数不同就计数-1,反之就+1