数组中占比超过一半的元素称之为数组的主要元素。

给定一个整数数组,找到它的主要元素。若没有,返回-1。

示例

示例 1:

输入:[1,2,5,9,5,9,5,5,5]
输出:5

示例 2:

输入:[3,2]
输出:-1

示例 3:

输入:[2,2,1,1,1,2,2]
输出:2

说明

你有办法在时间复杂度为 O(N),空间复杂度为 O(1) 内完成吗?

解题思路

1、观察数组array的元素、长度等,定义元素出现次数标识temp=1;

2、当数组长度= 1时,直接返回数组元素;

3、当数组长度 !=1时,对数组快排Arrays.sort(array),使数组中相同元素在一起,按升序排列;

4、遍历数组arrays,取数组前一个元素与后一个元素进行比较,如果元素相同,则出现次数temp++,然后判断temp与数组长度一半比较,大于则输出主要元素,否则出现次数temp置为1,重新判断;

Solution

Demo1:数组排序、遍历输出

public class Solution {public int majorityElement(int[] nums) {int len = nums.length;//默认数组单个元素初始出现的次数为1int temp = 1;if(len==1){return nums[0];}//数组快排序Arrays.sort(nums);//遍历数组for (int i = 0; i < len-1; i++) {//比较前后相邻元素是否相等,如果相等,则出现次数+1;if(nums[i] == nums[i+1]){temp++;//出现次数 > 数组长度的一半时if(temp > (len / 2)){//返回主要元素return nums[i];}}else {//前后元素不等,则返回i索引位置元素的默认出现次数temp=1;}}return -1;}
}

复杂度分析1

时间复杂度:O(n),其中n为数组元素个数。需要遍历整个数组;

空间复杂度:O(1)。除了返回值以外,额外使用的空间为常数。

NO.3 寻找数组主要元素相关推荐

  1. 编程之美2.10 寻找数组中的最大值和最小值

    这个问题其实很容易解决,就是循环遍历一遍数组,然后找到数组中存在的最大值和最小值就可以了,书中主要讨论的问题是比较次数较小的方法,不过,书中已经证明了,无论用什么方法最少的比较次数也就是循环遍历一遍的 ...

  2. python 寻找数组的中心索引_Leetcode724:寻找数组的中心索引(java、python3)

    寻找数组的中心索引 给定一个整数类型的数组 nums,请编写一个能够返回数组"中心索引"的方法. 我们是这样定义数组中心索引的:数组中心索引的左侧所有元素相加的和等于右侧所有元素相 ...

  3. 寻找数组变化:树形结构,分治模型

    寻找数组变化 给定数组arr = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1],返回第一个1的下标 很明显需要借助于二分查找,二分查找轻微变形就可以实现 第一种思 ...

  4. python 寻找数组的中心索引_Leetcode724查找数组Python的中心索引,LeetCode724,寻找,python...

    寻找数组的中心索引 这一次打卡不知道又摸了多久的鱼,周五没做题,周日补上. 题目 给定一个整数类型的数组 nums,请编写一个能够返回数组"中心索引"的方法. 我们是这样定义数组中 ...

  5. java 数组的索引_java如何寻找数组中心索引

    java如何寻找数组中心索引 发布时间:2020-04-21 10:10:24 来源:亿速云 阅读:65 作者:小新 本篇文章和大家了解一下java如何寻找数组中心索引.有一定的参考价值,有需要的朋友 ...

  6. 寻找数组中 的最大值最小值

    最简单的方法就是N中的每个数分别和max,min比较,看似2N次比较,其实大于max的就不必和min比较,小于min的也不必和max比较,因此比较的次数不足2N次,程序如下: [cpp] view p ...

  7. 724. 寻找数组的中心索引

    链接:724. 寻找数组的中心索引 题解:https://leetcode-cn.com/problems/find-pivot-index/solution/xun-zhao-shu-zu-de-z ...

  8. 基于递归寻找数组中的最大数字

    问题描述:寻找数组中的最大数字: # 寻找数组中的最大值,这个写法真的可以啊 def find_max(arr):# 先找基线条件if len(arr) == 0:return -1if len(ar ...

  9. C++寻找数组最大值和最小值

    寻找数组中的最大最小值 #include <iostream> using namespace std; #include <algorithm>int main() {int ...

  10. 快速排序——寻找数组第K大数(由浅入深,四种方法对比讲解!)

    寻找数组第K大数是大厂面试中经常考到的一题,有的小机灵鬼直接用sort()进行排序,两行代码解决,这样看似可行,实则掉入了出题人的陷阱.面试官希望看到的是你对算法的理解,而不是函数的调用.下面,我就以 ...

最新文章

  1. 使用man在线手册页
  2. SpringBoot 2.0 多图片上传加回显
  3. 如何在 Fedora 上使用 Podman
  4. Linux读写锁释放,Linux读写锁的使用
  5. JavaScript实现hammingDistance汉明距离算法(附完整源码)
  6. black:你的Python代码有点丑
  7. bzoj-2957 楼房重建
  8. tp5.0行为的用法,可以存入json数据,方便读取数据。
  9. HDU5514 Frogs
  10. JDBC连接(MySql)数据库步骤,以及查询、插入、删除、更新等十一个处理数据库信息的功能。...
  11. 实践作业2:黑盒测试实践(小组作业)每日任务记录1
  12. mysql约束教程,MySQL 约束
  13. iviewtable表格数据 录音播放下载
  14. 蔚来首座超充站落地苏州蔚来交付中心 已开启试运营
  15. QQ和微信使用到的网络协议
  16. realsched.exe进程
  17. Apache下的Lua的配置
  18. C# Xamarin For Android移动开发基础进修篇
  19. Linux 常用快捷键大全
  20. 【计算机视觉】人脸识别--人脸识别技术综述

热门文章

  1. php里ezpdo orm框架初探
  2. thymeleaf使用总结
  3. java创建线程的三种方式及其对照
  4. vSphere vMotion
  5. javascript 字符串中单引号和双引号区别
  6. MAC 升级 node.js 的快捷方法
  7. thinkPHP使用中遇到的问题交流==
  8. ofbiz碰到问题收集
  9. 给C#学习者的建议 - CLR Via C# 读后感
  10. Scott Mitchell 的ASP.NET 2.0数据操作教程之九:跨页面的主/从报表