博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Majority Element
阅读量:4133 次
发布时间:2019-05-25

本文共 1312 字,大约阅读时间需要 4 分钟。

原题描述

Given an array of size n, find the majority element. The majority element is the element that appears more than ⌊ n/2 ⌋ times.

You may assume that the array is non-empty and the majority element always exist in the array.

刚开始的想法

想着复制数组与每一个对应元素作差,重复最多的数组得到的零最多,于是用减后的绝对值求和最小值来判断。
这个思路有几个问题:
第一,即使实现了,就算是对的,复杂的非常高
第二,作差后得到的零最多,不代表求和就最小
第三,这种方法只能找出相对来说多的,而没有切合到more than n/2这个题设,相当于自己扩大问题,必然复杂度变高
public class Solution {    public int majorityElement(int[] nums) {        int[] dup = new int[nums.length];        int sum = 0;        int min = 100000;        int index = 0;        for(int i = 0;i < nums.length;i++){            for(int k = 0;k < nums.length;k++){                dup[k] = nums[k];            }            for(int j = 0;j < nums.length;j++){                dup[j] -= nums[i];                sum += Math.abs(dup[j]);            }            System.out.println("sum:-->"+sum);            if(sum <= min){                min = sum;                index = i;            }            sum = 0;//用于本轮计数的注意清零        }        return nums[index];    }}

正确的思路(转自http://www.cnblogs.com/fanyabo/p/4178993.html)

1.思路1:Moore voting algorithm--每找出两个不同的element,就成对删除即count--,最终剩下的一定就是所求的。时间复杂度:O(n)  从头到尾遍历,用一个cn=1记录,下一个数与上一个数一样的时候cn++,不一样就cn--,cn为0的时候换值
2.思路2:随机挑选一个元素,检查是否是多数元素。时间复杂度:Average:O(n)。期望查找次数 <2,因为目标过半
你可能感兴趣的文章
Vue项目中使用img图片和background背景图的使用方法
查看>>
vue 项目中图片选择路径位置static 或 assets区别
查看>>
vue项目打包后无法运行报错空白页面
查看>>
Vue 解决部署到服务器后或者build之后Element UI图标不显示问题(404错误)
查看>>
element-ui全局自定义主题
查看>>
facebook库runtime.js
查看>>
vue2.* 中 使用socket.io
查看>>
openlayers安装引用
查看>>
js报错显示subString/subStr is not a function
查看>>
高德地图js API实现鼠标悬浮于点标记时弹出信息窗体显示详情,点击点标记放大地图操作
查看>>
初始化VUE项目报错
查看>>
vue项目使用安装sass
查看>>
HTTP和HttpServletRequest 要点
查看>>
在osg场景中使用GLSL语言——一个例子
查看>>
关于无线PCB中 中50欧姆的特性阻抗的注意事项
查看>>
Spring的单例模式源码小窥
查看>>
后台服务的变慢排查思路(轻量级应用服务器中测试)
查看>>
MySQL中InnoDB事务的默认隔离级别测试
查看>>
微服务的注册与发现
查看>>
bash: service: command not found
查看>>