LeetCode-2529题:正整数和负整数的最大计数(原创)

【题目描述】

    给你一个按 非递减顺序 排列的数组 nums ,返回正整数数目和负整数数目中的最大值。换句话讲,如果 nums 中正整数的数目是 pos ,而负整数的数目是 neg ,返回 pos 和 neg二者中的最大值。注意: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 按 非递减顺序 排列。

【题目链接】. - 力扣(LeetCode)

【解题代码】

package array;public class MaximumCount {public static void main(String[] args) {//int[] nums = new int[]{-2, -1, -1, 1, 2, 3};int[] nums = new int[]{-3, -2, -1, 0, 0, 1, 2};//int[] nums = new int[]{5, 20, 66, 1314};long start = System.currentTimeMillis();int result = new MaximumCount().maximumCount(nums);System.out.println("函数运行时间:" + (System.currentTimeMillis() - start) + "MS");System.out.println("函数运行结果:" + result);}public int maximumCount(int[] nums) {int i = 0, j = nums.length - 1;while (i <= j) {int n =  i + (j - i) / 2;if (nums[n] < 0) {i = n + 1;} else { j = n - 1;}}while (i < nums.length && nums[i] == 0) {i++;}return Math.max(j + 1, nums.length - i);}
}

【解题思路】

        拿到题目,分析一下,感觉可以类似二分检索的方式:设置首尾两个索引值i,j,如果中间索引n值小于0,那么将i设置为n+1,否则(n值大于等于0)将j设置为n-1,循环结束后,索引j及之前的数据应该都是小于0的值,索引i及之后的数据都是大于等于0的数。再将i跳过之后等于0的数值即可。按照这个思路,很快完成代码编写,并提交成功

【解题步骤】

  1. 采用二分查找算法,首先定义首尾索引两个变量;
     int i = 0, j = nums.length - 1;
  2. 二分查找算法的终止条件,索引值i大于等于索引值j
    while (i <= j) {
  3. 获取索引值i和j中间索引值n
    int n =  i + (j - i) / 2;
  4. 如果nums[n]小于0,那么将i设置为n + 1,如果nums[n]大于等于0,那么将j设置为n - 1
    if (nums[n] < 0) {i = n + 1;
    } else { // 如果nums[n]大于等于0,那么将j设置为n - 1j = n - 1;
    }
  5. 循环结束后,向后跳过所有等于0的数值
    while (i < nums.length && nums[i] == 0) {i++;
    }
  6. 负数的数量等于j+1, 正数的数量等于nums.length - i,取两者最大值
    return Math.max(j + 1, nums.length - i);

【思考总结】

  1. 二分查找算法定义:二分查找算法(英语:binary search algorithm),也称折半搜索算法是一种在有序数组中查找某一特定元素的搜索算法。搜索过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜索过程结束;如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。如果在某一步骤数组为空,则代表找不到。这种搜索算法每一次比较都使搜索范围缩小一半。二分查找算法在最坏情况下是对数时间复杂度的,需要进行log⁡n次比较操作
  2. 按照大神Donald Knuth所说“思路很简单,细节是魔鬼”,二分查找算法需要特别关注中间索引值这些细节方面。比如如果写成“int n =  (i + j) / 2;” ,可能会存在溢出的bug,第一篇二分搜索论文是 1946 年发表,然而第一个没有 bug 的二分查找法却是在 1962 年才出现,中间用了 16 年的时间。
  3. 对于二分查找等经典算法,要学会灵活运用,根据实际情况进行调整
  4. LeetCode解题之前,一定不要看题解,看了就“破功”了! 

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

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

相关文章

开启RabbitMQ的WEB管理功能。

前言 今天讲下如何快速开启RabbitMQ的WEB管理功能&#xff0c;以及遇到的问题。 前期准备&#xff0c;需要安装好docker、docker-compose的运行环境。 一、安装RabbitMQ 1、创建相关目录&#xff0c;执行如下命令。 mkdir -p /docker/rabbitmq/data cd /docker/rabbitmq 2…

【数据结构】考研真题攻克与重点知识点剖析 - 第 7 篇:查找

前言 本文基础知识部分来自于b站&#xff1a;分享笔记的好人儿的思维导图与王道考研课程&#xff0c;感谢大佬的开源精神&#xff0c;习题来自老师划的重点以及考研真题。此前我尝试了完全使用Python或是结合大语言模型对考研真题进行数据清洗与可视化分析&#xff0c;本人技术…

无人机低空数字摄影测量系统

一、 系统概述 系统完全基于IDL设计实现&#xff0c;包括界面布局到人机交互再到底层核心函数功能。整体设计框架基于数字摄影测量的专业处理流程&#xff0c;实现了数据输入、数据预处理、影像信息检测、空间定向、地形三维建模、专题信息提取、成果输出与更新等功能。同时为…

【教程】App打包成IPA文件类型的四种方法

摘要 本教程总结了将App应用程序打包为IPA包的四种常用方法&#xff0c;包括Apple推荐的方式、iTunes拖入方法、自动编译脚本和解压改后缀名方法。每种方法都有其特点和适用场景&#xff0c;在实际开发中可以根据需求选择合适的方式进行打包。通过本教程&#xff0c;您将了解到…

Linux--进程的概念(二)

目录 一、进程的优先级1.1 基本概念1.2 查看进程优先级1.3 PRI&NI1.4 如何更改进程的优先级1.4.1 用top命令更改进程的nice1.4.2 用renice命令更改进程的nice 1.5 其他概念 二、环境变量2.1 基本概念2.2 常见的环境变量2.3 查看环境变量2.3.1 测试PATH2.3.2 测试HOME2.3.3 …

Adobe Photoshop 2024 v25.6强大的图形编辑工具

Adobe Photoshop 2024是一款非常强大的图像处理软件&#xff0c;具有丰富的功能和工具&#xff0c;可以满足各种图像处理需求。 软件下载&#xff1a;Adobe Photoshop 2024 v25.6中文激活版 它不仅支持基本的图像编辑和调整&#xff0c;还具有高级的特性&#xff0c;如智能对象…

自定义类型—结构体

目录 1 . 结构体类型的声明 1.1 结构的声明 1.2 结构体变量的创建与初始化 1.3 结构体的特殊声明 1.4 结构体的自引用 2. 结构体内存对齐 2.1 对齐规则 2.2 为什么存在内存对齐 2.3 修改默认对齐数 3. 结构体传参 4.结构体实现位段 4.1 位段的内存分配 1 . 结构体类…

idea中jdk版本的配置

配置JDK版本的步骤如下&#xff1a; 下载JDK安装文件&#xff1a;首先&#xff0c;需要从Oracle官方网站&#xff08;https://www.oracle.com/java/technologies/javase-jdk8-downloads.html&#xff09;下载适合您操作系统的JDK版本。 安装JDK&#xff1a;双击下载的安装文件…

LangChain-15 Manage Prompt Size 管理上下文大小,用Agent的方式询问问题,并去百科检索内容,总结后返回

背景描述 这一节内容比较复杂&#xff1a; 涉及到使用工具进行百科的检索&#xff08;有现成的插件&#xff09;有AgentExecutor来帮助我们执行后续由于上下文过大&#xff0c; 我们通过计算num_tokens&#xff0c;来控制我们的上下文 安装依赖 pip install --upgrade --qu…

Cherno CPP学习笔记-01-背景知识

0、工具网站收集 C语言版本特性 https://en.cppreference.com https://www.cplusplus.com https://www.tutorialspoint.com/cplusplus https://www.learncpp.com https://github.com/fffaraz/awesomecpp https://stackoverflow.com 网页CPP编译器 [C] gcc 12.1.0 - Wa…

SpringBoot集成Skywalking日志收集

在实际项目中&#xff0c;为了方便线上排查问题&#xff0c;尤其是微服务之间调用链路比较复杂的系统中&#xff0c;通过可视化日志的手段仍然是最直接也很方便的排查定位问题的手段&#xff0c;比如大家熟悉的ELK就是一种比较成熟的可视化日志展现方式&#xff0c;在skywalkin…

在Windows电脑上上传iOS应用至App Store

引言 &#x1f4f1; 使用UniApp开发iOS应用十分便捷&#xff0c;一套代码即可兼容多个平台。然而&#xff0c;UniApp开发iOS应用需要进行证书打包和将IPA文件上传至App Store&#xff0c;这两个步骤通常需要在Mac电脑上完成。那么&#xff0c;如果我们使用的是Windows开发环境…

Linux:gcc

Linux&#xff1a;gcc gcc概述语言发展史gcc的编译过程预处理编译汇编 gcc的链接过程动态库与静态库 gcc概述 GCC&#xff08;英文全拼&#xff1a;GNU Compiler Collection&#xff09;是 GNU 工具链的主要组成部分&#xff0c;是一套以 GPL 和 LGPL 许可证发布的程序语言编译…

C语言 | Leetcode C语言题解之第17题电话号码的字母组合

题目&#xff1a; 题解&#xff1a; char phoneMap[11][5] {"\0", "\0", "abc\0", "def\0", "ghi\0", "jkl\0", "mno\0", "pqrs\0", "tuv\0", "wxyz\0"};char* digits…

【算法】双指针算法

个人主页 &#xff1a; zxctscl 如有转载请先通知 题目 1. 283. 移动零1.1 分析1.2 代码 2. 1089. 复写零2.1 分析2.2 代码 3. 202. 快乐数3.1 分析3.2 代码 4. 11. 盛最多水的容器4.1 分析4.2 代码 5. LCR 179. 查找总价格为目标值的两个商品5.1 分析5.2 代码 6. 15. 三数之和…

MySQL 优化总结

目标知识 MySQL执行流程图 MySQL 优化成本路线图 优化成本&#xff1a;硬件>系统配置>数据库表结构>SQL及索引。优化效果&#xff1a;硬件<系统配置<数据库表结构<SQL及索引。 MySQL 五大优化原则 减少数据返回&#xff1a;设置合理字段数据类型、启用压缩…

C++——list类及其模拟实现

前言&#xff1a;这篇文章我们继续进行C容器类的分享——list&#xff0c;也就是数据结构中的链表&#xff0c;而且是带头双向循环链表。 一.基本框架 namespace Mylist {template<class T>//定义节点struct ListNode{ListNode<T>* _next;ListNode<T>* _pre…

京东云16核64G云服务器租用优惠价格500元1个月、5168元一年,35M带宽

京东云16核64G云服务器租用优惠价格500元1个月、5168元一年&#xff0c;35M带宽&#xff0c;配置为&#xff1a;16C64G-450G SSD系统盘-35M带宽-8000G月流量 华北-北京&#xff0c;京东云活动页面 yunfuwuqiba.com/go/jd 活动链接打开如下图&#xff1a; 京东云16核64G云服务器…

算法四十天-删除排序链表中的重复元素

删除排序链表中的重复元素 题目要求 解题思路 一次遍历 由于给定的链表是排好序的&#xff0c;因此重复的元素在链表中的出现的位置是连续的&#xff0c;因此我们只需要对链表进行一次遍历&#xff0c;就可以删除重复的元素。 具体地&#xff0c;我们从指针cur指向链表的头节…

Netty学习 应用Demo之“自动回复”聊天业务

Netty实现自动回复步骤 主要分成五步 1、创建EventLoopGroup实现循环组 管理EventLoop线程 2、创建Bootstrap &#xff0c;Bootstrap对于服务端而言&#xff0c;先后设置其中的线程组group、通道channel、处理器handler、客户端通道对应的处理器childHandler 3、自定义服务器接…