LeetCode 2529. 正整数和负整数的最大计数——每日一题

上一篇博客:LeetCode 993. 二叉树的堂兄弟节点——每日一题

 写在前面:大家好!我是晴空๓。如果博客中有不足或者的错误的地方欢迎在评论区或者私信我指正,感谢大家的不吝赐教。我的唯一博客更新地址是:https://ac-fun.blog.csdn.net/。非常感谢大家的支持。一起加油,冲鸭!
用知识改变命运,用知识成就未来!加油 (ง •̀o•́)ง (ง •̀o•́)ง

原题链接:LeetCode 2529. 正整数和负整数的最大计数

文章目录

  • 题目信息
    • 题目描述
    • 示例 1
    • 示例 2
    • 示例 3
    • 提示
    • 进阶
  • 题解
    • 方法一
      • 解题思路
      • 解题代码
      • 提交结果
      • 代码优化
    • 方法二
      • 解题思路
      • 解题代码
      • 提交结果

题目信息

题目描述

 给你一个按 非递减顺序 排列的数组 nums ,返回正整数数目和负整数数目中的最大值。

 换句话讲,如果 nums 中正整数的数目是 pos ,而负整数的数目是 neg,返回 posneg 二者中的最大值。

注意:0 既不是正整数也不是负整数。

示例 1

输入:nums = [-2,-1,-1,1,2,3]
输出:3
解释:共有 3 个正整数和 3 个负整数。计数得到的最大值是 3 。

示例 2

输入:nums = [-3,-2,-1,0,0,1,2]
输出:3
解释:共有 2 个正整数和 3 个负整数。计数得到的最大值是 3 。

示例 3

输入:nums = [5,20,66,1314]
输出:4
解释:共有 4 个正整数和 0 个负整数。计数得到的最大值是 4 。

提示

  • 1 <= nums.length <= 2000
  • -2000 <= nums[i] <= 2000
  • nums 按 非递减顺序 排列。

进阶

 你可以设计并实现时间复杂度为 O(log(n)) 的算法解决此问题吗?

题解

方法一

解题思路

 最容易想到的就是直接遍历一遍数组统计个数,比较返回即可。

解题代码

class Solution {public int maximumCount(int[] nums) {int posNum = 0, negNum = 0;for (int i = 0; i < nums.length; i++) {if (nums[i] > 0) posNum++;if (nums[i] < 0) negNum++;}return posNum > negNum ? posNum : negNum;}
}

提交结果

在这里插入图片描述

代码优化

 以上还可以优化一下,但是意义不大,时间复杂度最差还是 O(n)。但是在一般情况下要比遍历整个数组要好一些。优化后的代码如下:

class Solution {public int maximumCount(int[] nums) {int zeroNum = 0, posNum = 0, negNum = 0;if (nums[0] > 0) {posNum = nums.length;} else if (nums[0] == 0){for (int i = 0; i < nums.length; i++) {if (nums[i] == 0) zeroNum++;if (nums[i] > 0) break;}posNum = nums.length - zeroNum; } else {for (int i = 0; i < nums.length; i++) {if (nums[i] < 0) negNum++;if (nums[i] == 0) zeroNum++;if (nums[i] > 0) break;}posNum = nums.length - negNum - zeroNum;}return posNum - negNum > 0 ? posNum : negNum;}
}

方法二

解题思路

 在进阶中提到可以用时间复杂度为 O(log(n)) 的算法解决此问题,而且题目已经说明数组是按 非递减顺序 排列的。所以我们可以用 二分查找 算法进行解决。找到第一个大于等于0的数字的下标和第一个大于等于1的数字的下标即可。具体的二分查找算法之前的博客也写过,详情请看 LeetCode 35. 搜索插入位置(二分查找)。

解题代码

class Solution {public int maximumCount(int[] nums) {int negNum = Search_Bin(nums, 0);int posNum = nums.length - Search_Bin(nums, 1);return posNum - negNum > 0 ? posNum : negNum;}public int Search_Bin(int[] nums, int num) {int l = 0, r = nums.length;while (l < r) {int mid = (l + r) >> 1;if (nums[mid] >= num) r = mid;else l = mid + 1;}return l;}
}

提交结果

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/614901.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

「合肥*讯飞」4月19日PolarDB开源数据库沙龙,报名中!

庐州聚智&#xff0c;数字经济启航智慧海 江淮引才&#xff0c;科技浪潮激荡智慧潮 4月19日周五&#xff0c;PolarDB开源社区联合科大讯飞共同举办开源数据库技术沙龙&#xff0c;本次沙龙我们邀请了众多数据库领域的专家&#xff0c;与广大数据库开发者和爱好者们进行技术交…

三十一 超级数据查看器 教程 列表界面的特殊功能

三十一 超级数据查看器 教程 列表界面的特殊功能 点击 打开该讲的视频 点击访问app下载页面 豌豆荚 下载地址 大家好&#xff0c;这一课我们讲一下超级数据查看器的特殊功能&#xff0c;特殊功能能在列表界面空白处点击后&#xff0c;执行一些特殊的功能 首先&#xff0c;我们…

可视化展示点云数据——PCL

pcd文件的可视化 #include<pcl/io/pcd_io.h> #include<pcl/io/ply_io.h> #include<pcl/visualization/cloud_viewer.h>void viewerOneOff(pcl::visualization::PCLVisualizer& viewer) {viewer.setBackgroundColor(0, 0, 0); //设置背景颜色为黑色 }boo…

C#Socket通信实现多人联机和群发消息

1.服务器代码&#xff08;这个服务器每次接受消息后就会遍历连接的客户端&#xff0c;将消息发给其他所有的客户端&#xff09; using System; using System.Collections.Generic; using System.Net; using System.Net.Sockets; using System.Text; using System.Threading;pu…

【P2P】

文章目录 P2P应用纯P2P架构文件分发&#xff1a;C/S vs P2P文件分发时间&#xff1a;C/S模式文件分发时间&#xff1a;P2P模式 P2P文件分发&#xff1a;BitTorrentP2P文件分发&#xff1a;BitTorrentBitTorrent&#xff1a;请求&#xff0c;发送文件块BitTorrent&#xff1a;ti…

Java常用数据结构与集合

数据结构 数组&#xff1a; 内存地址连续检索效率高(可以通过下标访问成员)增删操作效率低(保证数据越界的问题,需动态扩容)长度固定&#xff0c;扩容的需要新的数组复制或者Arrays类的copyOf方法 链表 内存地址不连续查询快删除慢&#xff0c;因为需要移动指针又分双向链表…

基于Springboot的餐厅点餐系统

基于SpringbootVue的餐厅点餐系统的设计与实现 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringbootMybatis工具&#xff1a;IDEA、Maven、Navicat 系统展示 首页展示 菜品详情页 菜品信息 个人中心 后台管理 菜品信息管理 用户管理 菜…

为什么负载电流增加时电源电压会下降?

原文来自微信公众号&#xff1a;工程师看海&#xff0c;与我联系&#xff1a;chunhou0820 看海原创视频教程&#xff1a;《运放秘籍》 大家好&#xff0c;我是工程师看海。 在以前的文章中我总是提到当负载电流增加时&#xff0c;电源的输出电压会下降&#xff0c;很多同学在实…

Kubernetes学习笔记12

k8s核心概念&#xff1a;控制器&#xff1a; 我们删除Pod是可以直接删除的&#xff0c;如果生产环境中的误操作&#xff0c;Pod同样也会被轻易地被删除掉。 所以&#xff0c;在K8s中引入另外一个概念&#xff1a;Controller&#xff08;控制器&#xff09;的概念&#xff0c;…

mysql索引与优化问题

作为一个java程序员&#xff0c;mysql数据库面试应该是比较多的了&#xff1b;而关于数据库的面试&#xff0c;最多的就是性能问题&#xff0c;而以性能为起点&#xff0c;延伸出很多具体的问题。 我们使用第一性原理的方法来分析&#xff0c;为什么面试中一定会问数据库的索引…

70 个常用的GIS Python 库

由于其多功能性、广泛的库生态系统和用户友好的语法&#xff0c;Python 已成为地理信息系统 (GIS) 和遥感领域的主导语言。这个 70 个地理空间 Python 库的汇编展示了可用于 GIS 和遥感数据处理和分析的丰富工具包。 Python 在 GIS 中的重要性源于它处理复杂地理空间数据的能力…

【学习】软件测试人员使用Loadrunner进行性能测试的优势

在软件测试领域&#xff0c;性能测试是一项至关重要的环节&#xff0c;它关乎到软件系统的稳定性和用户体验。而在这其中&#xff0c;Loadrunner作为一款久经考验的性能测试工具&#xff0c;凭借其独特的优势&#xff0c;成为了众多企业和开发者眼中的“得力助手”。 首先&…