NO.3 寻找数组主要元素
数组中占比超过一半的元素称之为数组的主要元素。
给定一个整数数组,找到它的主要元素。若没有,返回-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 寻找数组主要元素相关推荐
- 编程之美2.10 寻找数组中的最大值和最小值
这个问题其实很容易解决,就是循环遍历一遍数组,然后找到数组中存在的最大值和最小值就可以了,书中主要讨论的问题是比较次数较小的方法,不过,书中已经证明了,无论用什么方法最少的比较次数也就是循环遍历一遍的 ...
- python 寻找数组的中心索引_Leetcode724:寻找数组的中心索引(java、python3)
寻找数组的中心索引 给定一个整数类型的数组 nums,请编写一个能够返回数组"中心索引"的方法. 我们是这样定义数组中心索引的:数组中心索引的左侧所有元素相加的和等于右侧所有元素相 ...
- 寻找数组变化:树形结构,分治模型
寻找数组变化 给定数组arr = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1],返回第一个1的下标 很明显需要借助于二分查找,二分查找轻微变形就可以实现 第一种思 ...
- python 寻找数组的中心索引_Leetcode724查找数组Python的中心索引,LeetCode724,寻找,python...
寻找数组的中心索引 这一次打卡不知道又摸了多久的鱼,周五没做题,周日补上. 题目 给定一个整数类型的数组 nums,请编写一个能够返回数组"中心索引"的方法. 我们是这样定义数组中 ...
- java 数组的索引_java如何寻找数组中心索引
java如何寻找数组中心索引 发布时间:2020-04-21 10:10:24 来源:亿速云 阅读:65 作者:小新 本篇文章和大家了解一下java如何寻找数组中心索引.有一定的参考价值,有需要的朋友 ...
- 寻找数组中 的最大值最小值
最简单的方法就是N中的每个数分别和max,min比较,看似2N次比较,其实大于max的就不必和min比较,小于min的也不必和max比较,因此比较的次数不足2N次,程序如下: [cpp] view p ...
- 724. 寻找数组的中心索引
链接:724. 寻找数组的中心索引 题解:https://leetcode-cn.com/problems/find-pivot-index/solution/xun-zhao-shu-zu-de-z ...
- 基于递归寻找数组中的最大数字
问题描述:寻找数组中的最大数字: # 寻找数组中的最大值,这个写法真的可以啊 def find_max(arr):# 先找基线条件if len(arr) == 0:return -1if len(ar ...
- C++寻找数组最大值和最小值
寻找数组中的最大最小值 #include <iostream> using namespace std; #include <algorithm>int main() {int ...
- 快速排序——寻找数组第K大数(由浅入深,四种方法对比讲解!)
寻找数组第K大数是大厂面试中经常考到的一题,有的小机灵鬼直接用sort()进行排序,两行代码解决,这样看似可行,实则掉入了出题人的陷阱.面试官希望看到的是你对算法的理解,而不是函数的调用.下面,我就以 ...
最新文章
- 使用man在线手册页
- SpringBoot 2.0 多图片上传加回显
- 如何在 Fedora 上使用 Podman
- Linux读写锁释放,Linux读写锁的使用
- JavaScript实现hammingDistance汉明距离算法(附完整源码)
- black:你的Python代码有点丑
- bzoj-2957 楼房重建
- tp5.0行为的用法,可以存入json数据,方便读取数据。
- HDU5514 Frogs
- JDBC连接(MySql)数据库步骤,以及查询、插入、删除、更新等十一个处理数据库信息的功能。...
- 实践作业2:黑盒测试实践(小组作业)每日任务记录1
- mysql约束教程,MySQL 约束
- iviewtable表格数据 录音播放下载
- 蔚来首座超充站落地苏州蔚来交付中心 已开启试运营
- QQ和微信使用到的网络协议
- realsched.exe进程
- Apache下的Lua的配置
- C# Xamarin For Android移动开发基础进修篇
- Linux 常用快捷键大全
- 【计算机视觉】人脸识别--人脸识别技术综述