当前位置: 首页 > wzjs >正文

蓝色大气企业网站模板企业网站建设方案策划书

蓝色大气企业网站模板,企业网站建设方案策划书,天津商务网站建设,深圳罗湖网站制作操作系统:ubuntu22.04 IDE:Visual Studio Code 编程语言:C11 题目描述 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。 你可以假设数组非空,并且一定存在满足条件的数字(即一定有一个数字出现次数超…
  • 操作系统:ubuntu22.04
  • IDE:Visual Studio Code
  • 编程语言:C++11

题目描述

数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。
你可以假设数组非空,并且一定存在满足条件的数字(即一定有一个数字出现次数超过一半)。

示例:

输入: [1, 2, 3, 2, 2, 2, 5, 4, 2]
输出: 2

解法一:摩尔投票法(最优解,时间 O(n),空间 O(1))

这是本题的最佳解法,利用“抵消”思想。
🧠 核心思想:

  • 设一个候选数 candidate 和计数器 count;
  • 遍历数组:
    • 如果 count == 0,更新候选人为当前数;
    • 如果当前数等于候选人,count++;
      - 否则 count–;
  • 最终留下的候选人就是我们要找的“出现次数超过一半”的数字。

因为题目保证存在,所以不需要额外验证。

实现代码

#include <vector>int findMost( std::vector< int > nums )
{// 候选人int candidate = nums[ 0 ];// 投票计数器int count = 1;for ( int i = 1; i < nums.size(); ++i ){if ( nums[ i ] == candidate ){// 相同数字,票数加一count++;}else{// 不同数字,票数减一count--;// 票数归零,更换候选人if ( count == 0 ){candidate = nums[ i ];count     = 1;}}}// 因为题目保证存在,所以直接返回候选人即可return candidate;
}int main()
{std::vector< int > nums = { 1, 3, 2, 2, 2, 2, 6 };int count = findMost( nums );std::cout << count << std::endl;
}

运行结果

2

解法二:哈希表统计(次优解,时间 O(n),空间 O(n))

遍历数组,使用哈希表记录每个数字出现的次数,最后找到出现次数大于 n/2 的那个数字。
示例代码:


int findMost( std::vector< int >& nums )
{std::unordered_map< int, int > freq;for ( int num : nums ){freq[ num ]++;if ( freq[ num ] > nums.size() / 2 )return num;}return -1;  // 不会执行到这里(题目保证存在)
}

解法三:排序取中位数(时间 O(n log n),空间 O(1) 或 O(n))

将数组排序后,中间位置的元素一定是出现次数超过一半的数字(因为其至少占一半+1)。

int findMost( std::vector< int >& nums )
{std::unordered_map< int, int > freq;for ( int num : nums ){freq[ num ]++;if ( freq[ num ] > nums.size() / 2 )return num;}return -1;  // 不会执行到这里(题目保证存在)
}
http://www.dtcms.com/wzjs/428811.html

相关文章:

  • 建设网站包括哪些灰色词seo排名
  • 如何给网站做脚本网络推广seo教程
  • 怎么做网站省钱太原今日头条
  • wordpress 形式php苏州seo怎么做
  • 北京市顺义区住房和建设委员会网站自己可以做网站吗
  • 网站首页没排名但内页有排名百度新闻头条
  • 网站公司提供程序百度app广告
  • 安全邮箱注册网站引流获客工具
  • 厦门关键词推广优化seo查询排名软件
  • 做电影网站要不要收费的申请自己的网站
  • linux主网站设计上海发布最新情况
  • 做网站+广告费+步骤沈阳网络关键词排名
  • 广州手机网站建设公司如何网上免费做推广
  • 深圳网站建设资讯网络营销专业
  • 简述网页与网站的区别企业邮箱
  • 域名做网站云搜索引擎入口
  • 做网站小程序源码外链代发软件
  • 网站建设 技术seo推广宣传
  • 成都网站建设维护营销策略分析论文
  • 美食网站开发步骤地推拉新app推广接单平台
  • 淘宝网网页版登录官网登录贵州seo和网络推广
  • 建立网站要什么条件和多少钱网络seo排名
  • 装修平台派单骗局网络优化报告
  • 怎么用sublime做网站前端性能优化有哪些方法
  • 网站地址url是什么淘宝优化
  • 励志做的很好的网站奉化首页的关键词优化
  • 垦利县建设局网站小程序搭建教程
  • 重庆哪里可以学习网站建设和维护百度云搜索
  • 四平网站设计公司东莞网站公司哪家好
  • 哪些网站做装修东莞做网站的联系电话