给定一个大小为 n 的数组,找到其中的众数。众数是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。你可以假设数组是非空的,并且给定的数组总是存在众数。示例 1:输入: [3,2,3]
输出: 3
示例 2:输入: [2,2,1,1,1,2,2]
输出: 2

我的解答:

class Solution {public int majorityElement(int[] nums) {Arrays.sort(nums);int count = 1;int curNum = nums[0];for (int i = 1; i < nums.length; i++) {if (nums[i] == curNum) {count++;if (count > nums.length /2) {return curNum;}}else {curNum = nums[i];count = 1;}}return curNum;}
}

网上最快的解答:

class Solution {public int majorityElement(int[] nums) {Arrays.sort(nums);return nums[nums.length/2];}
}

说来遗憾,我也是调用了排序,忘了当前要的是众数,超过一半的数,直接返回一半的位置的那个数就可以了。看来自己的算法思维还是需要提高。

我喜欢的解决方法:

class Solution {public int majorityElement(int[] nums) {int ans = nums[0], count = 1;for(int i = 1; i < nums.length; ++i) {if(count == 0) {count++;ans = nums[i];}else if(nums[i] == ans) {count++;}else {count--;}}return ans;}
}

一开始没有看懂啊,后来还怀疑他的算法。最后想通了,真的觉得这个才是最优秀的解决方法。因为没有排序,而且算法复杂度是n。

他是这样的,一开始把第一个数拿出来,然后如果遇到和自己不一样的数字,就当前数字的count 就减去1,继续下一个数,当count为0的时候,说明之前的两个不同的数的个数是相同的,可以直接排除了(前面遇到的数字就可以抵消了,因为他们的个数是一样的)。继续下一个,当发现一样的数,count 就加1,不一样的话,就减1.。如果当前数组存在众数的话,ans 保存的那个数,一定是出现次数最多的那个众数。

总结:

1.算法是根据当前情况写出来最快的解决问题的方法,如果是没有根据当前给定的条件,不管什么都是遍历循环解决,那么也太呆了。根本称不上算法。那样的解决方法很无脑,但是很简单。一定要根据条件,相出来一些东西。
2.想去的公司,面试有没有过,看着同事都去了好公司,自己也很努力,但是没有成效,但愿十年寒窗无人问,一朝成名天下知吧。

算法-------求众数相关推荐

  1. 【每日一算法】求众数

    微信改版,加星标不迷路! 每日一算法-求众数 作者:阿广 阅读目录 1 题目 2 解析 1 题目 给定一个大小为 n 的数组,找到其中的众数.众数是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素. 你 ...

  2. 摩尔投票法(力扣- -229. 求众数 II)

    摩尔投票法(力扣- -229. 求众数 II) 文章目录 摩尔投票法(力扣- -229. 求众数 II) 一.题目描述 二.分析 摩尔投票法 总结 三.代码 一.题目描述 二.分析 这道题如果用O(N ...

  3. python众数问题给定含有n个元素的多重集合s_分治法求众数 给定含有n个元素的多重集合S 联合开发网 - pudn.com...

    分治法求众数 所属分类:数据结构 开发工具:C/C++ 文件大小:240KB 下载次数:3 上传日期:2018-01-04 20:19:09 上 传 者:九鼎 说明:  给定含有n个元素的多重集合S, ...

  4. c语言分治法求众数重数_分治法求众数 - osc_twlari2q的个人空间 - OSCHINA - 中文开源技术交流社区...

    分治法求众数 Problem Description 给定含有n个元素的多重集合S,每个元素在S中出现的次数称为该元素的重数.多重集S中重数最大的元素称为 众数.例如,S={1,2,2,2,3,5}. ...

  5. 如何用Python求众数

    如何用Python求众数 在书里(参考文献[1])看到有这样的代码: max(set(A),key=A.count) 它可以返回列表A中的众数,现对其进行解释. set 博客 python set() ...

  6. 独乐乐不如众乐乐,如何装逼的求众数

    点击蓝色"五分钟学算法"关注我哟 加个"星标",一起学算法 今天分享的题目来源于 LeetCode 上第 169 号问题:求众数(求数组中超过一半的数字).题目 ...

  7. leetcode【简单】169、多数元素 / 229、求众数2

    169.多数元素 给定一个大小为 n 的数组,找到其中的多数元素.多数元素是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素. 你可以假设数组是非空的,并且给定的数组总是存在多数元素. 尝试设计时间复杂 ...

  8. c语言分治法求众数重数_分治法求众数问题 (配图)

    标签: 采用分治法,以中间为界限, 先计算围绕中间这个数字的众数情况,然后左右分开递归计算结果,取最值即可. 左右递归计算的时候要先做判断,假如左边或是右边的个数都比已求的重数小,就没必要计算了,即使 ...

  9. java求众数_Java实现 LeetCode 229 求众数 II(二)

    229. 求众数 II 给定一个大小为 n 的数组,找出其中所有出现超过 ⌊ n/3 ⌋ 次的元素. 说明: 要求算法的时间复杂度为 O(n),空间复杂度为 O(1). 示例 1: 输入: [3,2, ...

最新文章

  1. nodejs-模块系统
  2. 如何区分“Invoice代码”和“Invoice号码”?
  3. 神经网络densecnn_对比学习用 Keras 搭建 CNN RNN 等常用神经网络
  4. oracle,EBS的库存数据视图
  5. 小电科技开启裁员,涉及多个部门一律劝退?回应:消息不属实
  6. mysql挂载数据卷_docker卷挂载技术
  7. 由a标签的onclick影出来的问题
  8. Spring框架RCE 0day漏洞,官方解决方案
  9. 基于移动通信数据的城市可视分析研究
  10. 跟谁学 英语口语20090927疑问句
  11. Win10 安装NASM
  12. WPS文档:格式显示,页码标注,公式居中编号右对齐,公式编号不能在行中间显示
  13. 微软开发的服务器简称,AAD Connect 微软官方的描述准确吗?
  14. tc_net_secu 使用手册
  15. SQL更新(INSERT,UPDATE,DELETE)语句的一般格式及注意事项
  16. Android NDK编译libjpeg-turbo压缩图片
  17. excel 数据计算
  18. 大智慧新一代公式编辑语法大全
  19. 通知、通告、通报、公告、告示的区别和用法
  20. C#+CodeSoft 读取Label变量

热门文章

  1. Mysql共享锁实例_mysql共享锁与排他锁用法实例分析
  2. java script 月日年转年月日_js的如何进行日期格式转换成年月日
  3. python背景怎么自定义铃声_python爬取手机铃声
  4. python图片识别拉框_python目标检测给图画框,bbox画到图上并保存案例
  5. cdh 安装_CDH 中为spark 安装 python3
  6. CUDA学习-计算实际线程ID
  7. u盘变o字节怎么修复_U盘启动盘在重装系统时识别不了解决办法
  8. 少儿编程python教材_少儿编程|Python环境安装
  9. 图形上下文的栈操作(保存和恢复)
  10. Python 学习笔记 - Memcached