LeetCode 5126. 有序数组中出现次数超过25%的元素 Element Appearing More Than 25% In Sorted Array

地址 https://leetcode-cn.com/contest/biweekly-contest-15/problems/element-appearing-more-than-25-in-sorted-array/

目描述
给你一个非递减的 有序 整数数组,已知这个数组中恰好有一个整数,它的出现次数超过数组元素总数的 25%。
请你找到并返回这个整数

示例:

输入:arr = [1,2,2,6,6,6,6,7,10]
输出:6

提示:

1 <= arr.length <= 10^4
0 <= arr[i] <= 10^5

算法1
已经排序 而且超过25%
那么可以直接比较25%的长度间隔的两个数是否相等

C++ 代码

class Solution {
public:
    int findSpecialInteger(vector<int>& arr) {
        int n = arr.size(); int len = n/4;
        for(int i = 0; i < n;i++){
            if(i+len < n && arr[i] == arr[i+len]){
                return arr[i];
            }
        }

        return -1;
    }
};

原文地址:https://www.cnblogs.com/itdef/p/12041657.html

时间: 2024-07-30 13:11:47

LeetCode 5126. 有序数组中出现次数超过25%的元素 Element Appearing More Than 25% In Sorted Array的相关文章

【Leetcode 数组】 有序数组中出现次数超过25%的元素(1287)

题目 给你一个非递减的?有序?整数数组,已知这个数组中恰好有一个整数,它的出现次数超过数组元素总数的 25%. 请你找到并返回这个整数 示例: 输入:arr = [1,2,2,6,6,6,6,7,10] 输出:6 提示: 1 <= arr.length <= 10^4 0 <= arr[i] <= 10^5 解答 # class Solution: # def findSpecialInteger(self, arr): # d = {} # length = len(arr) #

算法学习(十一)数组中出现次数超过长度一半的数

数组中出现次数超过数组长度一半的 数字 题目描述: 给定 一个数组,找到数组中出现次数超过数组长度一半的数字,如数组 a[]= {0,1,2,1,1},输出为1 分析: 1,可以使用伴随数组b,遍历数组a,将值作为数组b的下标,将次数作为值,然后遍历数组b,找到次数超过一半的值,然后输出.时间复杂度为O(N),不过要增加空间复杂度. 2,我们可以先对数组进行排序,因为某个数字出现次数超过一半,所以在数组的N/2处,就一定是那个数字.时间复杂主要为排序的时间,使用快排O (N*logN). 3,有

1152: 零起点学算法59——找出一个数组中出现次数最多的那个元素

1152: 零起点学算法59--找出一个数组中出现次数最多的那个元素 Time Limit: 1 Sec  Memory Limit: 64 MB   64bit IO Format: %lldSubmitted: 990  Accepted: 532[Submit][Status][Web Board] Description 找出一个数组中出现次数最多的那个元素 Input 第一行输入一个整数n(不大于20) 第二行输入n个整数 多组数据 Output 找出n个整数中出现次数最多的那个整数(

Leetcode 540.有序数组中的单一元素

有序数组中的单一元素 给定一个只包含整数的有序数组,每个元素都会出现两次,唯有一个数只会出现一次,找出这个数. 示例 1: 输入: [1,1,2,3,3,4,4,8,8] 输出: 2 示例 2: 输入: [3,3,7,7,10,11,11] 输出: 10 注意: 您的方案应该在 O(log n)时间复杂度和 O(1)空间复杂度中运行. 思路 取中间组坐标:mid = ( left + right ) / 2若 mid组中两元素相同 则唯一出现一次的元素必在 mid+1 组 到 right 组中(

Leetcode题目215.数组中的第K个最大元素(中等)

题目描述: 在未排序的数组中找到第 k 个最大的元素.请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素. 示例 1: 输入: [3,2,1,5,6,4] 和 k = 2 输出: 5 示例 2: 输入: [3,2,3,1,2,4,5,5,6] 和 k = 4 输出: 4 说明: 你可以假设 k 总是有效的,且 1 ≤ k ≤ 数组的长度. 思路分析: 思路一:排序+遍历,如果是升序,那就是返回nums[n-k],如果是降序,那就是返回nums[k-1] class

数组中出现次数超过数组长度一半的值

题目:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.比如输入一个长度为18的数组{1,0,2,6,1,0,1,1,5,2,1,1,1,3,1,1,5,1}, 因为数组中数字1出现的次数超过数组的长度的一半,因此输出1. 1)最直接的办法是先把数组排序,那么超过一半的元素一定是数组最中间的元素. 2)再深入思考一下就会想到高速排序过程,利用partion找出index==middle时,index相应的值,而不必全然排序. 3)另外一种办法比較抽象,设一个变量保存当前值,设一个次数

数组中出现次数超过数组长度一半的数字

题目描述:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2.如果不存在则输出0. 解法一:若条件满足则这个数字在排序后的数组中必在最中间,所以把这个数字统计次数后和数字的一半长度比较后,若大于则满足条件,否则不满足.因涉及到快排,故时间复杂度时O(nlgn) class Solution { public: int MoreThanHalfNum_Solut

Leetcode 215、数组中第k个最大的元素

题目链接:kth-largest-element-in-an-array 方法1: 使用快速排序. 1.对数组进行partition,从left到right随机选择一个主元pivot,将pivot与left的元素交换位置. 另索引 j 初始为left,扫描从left + 1到right的元素,若小于pivot,则将其与 ++j 处的元素交换. 这样当扫描结束,left的元素即主元pivot,从left + 1到 j 的元素都大于pivot,从 j + 1到right的元素都小于等于pivot.

找出一个数组中出现次数最多的那个元素

#include <stdio.h> int main() { int n,a[20],i,j,flag=0,max; int b[20]={0}; while(scanf("%d",&n)==1){ if(n==0) break; for(i=0;i<n;i++) scanf("%d",&a[i]); for(i=0;i<n-1;i++) for(j=i+1;j<n;j++) if(a[i]==a[j]) b[i]++