• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C语言 > Majority Element

Majority Element

作者:Crystal 字体:[增加 减小] 来源:互联网 时间:2017-09-12

Crystal通过本文主要向大家介绍了c语言实现分而治之算法等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

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.

解题思路:

这是关于分而治之算法的题目。运用递归的思想,将原来的数组减半分成两个数组,再计算出这两个数组的majority element。如果这两个数组的majority element相等的话,就说明这是原来数组的majority element,否则就比较这两个elements在原来数组中出现的次数,次数多的element才是原来数组真正的majority element。
一开始判断elements出现次数的时候,选择for循环遍历的粗暴方法:

 for (int i = begin; i <= end; i++) {
    if (nums[i] == left_element)
        num1++;
    else if (nums[i] == right_element)
        num2++;
 }

但是很明显,RunTime Error!!!之后发现STL算法中的count函数可以实现for循环的功能并且降低时间复杂度,试了一下就真的Accepted!!!

代码实现:

#include <vector.h>
#include <algorithm.h>

class Solution {
public:
    int majorityElement(vector<int>& nums) {
        int begin = 0;
        int end = nums.size()-1;    //注意“-1”
        return majority(nums, begin, end);
    }
 private:
    int majority(vector<int>& nums, int begin, int end) {
        //nums只有1个元素
        if (begin == end)
            return nums[begin];
        else {
            int middle = (end - begin)/2 + begin;   //注意begin,middle,end的大小关系
            int left_element = majority(nums, begin, middle);
            int right_element = majority(nums, middle+1, end);
            if (left_element == right_element)
                return left_element;
            else {
                int num1 = 0, num2 = 0;
                num1 = count(nums.begin()+begin, nums.begin()+end+1, left_element);
                num2 = count(nums.begin()+begin, nums.begin()+end+1, right_element);
                if (num1 >= num2) return left_element;
                else return right_element;
            }
        }
    }
};
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

相关文章

  • 2017-05-28c# 实现获取汉字十六进制Unicode编码字符串的实例
  • 2017-05-28C++循环链表之约瑟夫环的实现方法
  • 2017-05-28c语言中使用BF-KMP算法实例
  • 2017-05-28基于C++语言实现机动车违章处罚管理系统
  • 2017-05-28深入解析C++中的引用类型
  • 2017-05-28C语言实现斗地主的核心算法
  • 2017-05-28C++实现简单的职工管理系统实训代码
  • 2017-05-28C++统计中英文大小写字母、数字、空格及其他字符个数的方法
  • 2017-05-28C++Primer笔记之顺序容器的使用详解
  • 2017-05-28VC下实现fopen支持中文的方法

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 详解C语言中strpbrk()函数的用法
    • c语言二进制数按位输出示例
    • C++计算ICMP头的校验和实例
    • 用C语言实现单链表的各种操作(二)
    • C++设置超时时间的简单实现方法
    • C++ 学习之旅三 我和超级玛丽有个约会
    • 常用排序算法整理分享(快速排序算法、希尔排序)
    • C++字符数组的输入输出和字符串结束标志使用讲解
    • C++中vector的用法实例解析
    • C++构造函数深度学习

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有