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

做网站留言板需要什么条件谷歌广告联盟

做网站留言板需要什么条件,谷歌广告联盟,宁波品牌网站设计特点,详情页设计多少钱序言:今天是第五题啦,前面四题的解法还清楚吗?可以到面试算法题系列150题专栏 进行复习呀。 温故而知新,可以为师矣!加油,未来的技术大牛们。 多数元素 给定一个大小为 n 的数组 nums ,返回其…

序言:今天是第五题啦,前面四题的解法还清楚吗?可以到面试算法题系列150题专栏 进行复习呀。

温故而知新,可以为师矣!加油,未来的技术大牛们。

多数元素

给定一个大小为 n 的数组 nums ,返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。

你可以假设数组是非空的,并且给定的数组总是存在多数元素

示例 1:

输入:nums = [3,2,3]
输出:3

示例 2:

输入:nums = [2,2,1,1,1,2,2]
输出:2

实现思路:这个问题是经典的"多数投票问题"(Boy Scout Rule),可以使用摩尔投票算法(Moore's Voting Algorithm)来解决。这个算法的核心思想是使用两个变量,一个记录当前的候选多数元素,另一个记录该元素的票数。遍历数组,对于每个元素,如果它与当前候选元素相同,则增加票数;如果不同,则减少票数。如果在减少票数后票数变为0,则将当前元素作为新的候选多数元素。

实现代码:

public int majorityElement(int[] nums) {int candidate = nums[0]; // 当前候选多数元素int count = 1; // 当前候选元素的票数// 摩尔投票算法的主体for (int i = 1; i < nums.length; i++) {if (count == 0) {candidate = nums[i]; // 重置候选元素count = 1; // 重置票数} else if (nums[i] == candidate) {count++; // 如果当前元素与候选元素相同,增加票数} else {count--; // 如果当前元素与候选元素不同,减少票数}}// 根据题目保证,不需要验证步骤,直接返回候选多数元素return candidate;
}

这个方法的时间复杂度是 O(n),空间复杂度是 O(1),因为它只需要常数级别的额外空间。

小补充:如果数组是非空的,给定数组不一定存在多数元素呢?怎么实现呢?

思路:上述代码是选出可能为多数元素的候选元素,我们只要在这个基础上对其进行判断是否为多数元素即可。

实现代码:

public int majorityElement(int[] nums) {int candidate = nums[0]; // 当前候选多数元素int count = 1; // 当前候选元素的票数for (int i = 1; i < nums.length; i++) {if (nums[i] == candidate) {count++; // 如果当前元素与候选元素相同,增加票数} else {if (count == 0) {candidate = nums[i]; // 票数归零,更新候选元素} else {count--; // 如果当前元素与候选元素不同,减少票数}}}// 验证候选元素是否确实是多数元素int result = 0;int validCount = 0;//记录候选元素的个数for (int num : nums) {if (num == candidate) {validCount++;}}// 如果候选元素的票数大于数组长度的一半,则返回该元素if (validCount > nums.length / 2) {return candidate;}// 如果没有找到多数元素,则返回0return 0;
}

知识复习:int num : nums 是一种被称为“增强型for循环”(Enhanced For Loop)的语法结构,它用于遍历数组或集合中的每个元素。这个语法结构允许你用一种简洁的方式迭代数组或Iterable对象。

  • int num:这定义了一个名为 num 的变量,它将用于接收数组或集合中的当前元素。在这个上下文中,num 是每次循环中的元素变量名,你可以使用任何有效的变量名。

  • :(冒号):这个符号用于分隔变量定义和迭代的对象。

  • nums:这是被迭代的对象,可以是一个数组或实现了 Iterable 接口的集合。

整个表达式 int num : nums 的意思是:“对于数组或集合 nums 中的每个元素,用变量 num 引用它”。

下面是一个使用这种语法遍历数组的示例:

int[] nums = {1, 2, 3, 4, 5};for (int num : nums) {// 打印数组中的每个元素System.out.println(num);}

这段代码将打印:

1

2

3

4

5

每个循环迭代中,数组 nums 中的当前元素都会被赋值给变量 num,然后执行循环体内的代码。这种语法使得遍历数组和集合变得更加简洁和易于阅读。

http://www.ysxn.cn/news/1581.html

相关文章:

  • 新乡网站建设服务哪家好排名函数rank怎么用
  • 网站工作室网站关键词的优化方案
  • 网站建设属于哪种公司开发新客户的十大渠道
  • 网站维护方案怎么做网络营销是什么课程
  • 网站seo优化方案站长之家网站
  • 哪些网站可以免费发帖做推广武汉网站建设推广公司
  • 企业做网站的坏处自己怎么制作一个网站
  • 石家庄市城乡建设部网站北京网站建设开发公司
  • 东莞外贸网站建设百度浏览器网站入口
  • wordpress缩进福州seo代理计费
  • 嘉兴网站建设999 999网络新闻发布平台发稿
  • 邯郸做wap网站价格发稿网
  • 自己做的网站添加域名发布软文是什么意思
  • 做网站的私活扫图片识别图片原图
  • 深圳网站网页制作深圳百度推广属于哪家公司
  • 信息设计网站seo搜索引擎优化工资
  • 广州新塘网站制作推广下载百度app最新版到桌面
  • 做淘宝哪个女装批发网站比较好关键字
  • 集团网站网页模板西宁网站seo
  • 建立网站例题seo三人行论坛
  • 如何做视频购物网站游戏代理推广渠道
  • 有人利用婚恋网站做微商网络推广是诈骗吗
  • 高端网页欣赏seo顾问服务四川
  • 沈阳开发网站公司seo网站关键词排名优化公司
  • 做简单的网站链接南昌seo排名
  • 湖南网站制作公司app开发平台开发
  • 企业网站建设方案行情天津seo优化公司哪家好
  • vps转移网站广东seo点击排名软件哪里好
  • 后台给网站做关键字新网站推广方法
  • 做网站建设的电话销售嘉峪关seo