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

news2024/11/30 14:36:32

【题目描述】

    给你一个按 非递减顺序 排列的数组 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 - 1
        j = 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.coloradmin.cn/o/1586247.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux 线程:线程同步、生产者消费者模型

目录 一、死锁 二、条件变量实现线程同步 1、为什么需要线程同步 2、条件变量、同步、竞态条件 3、条件变量函数&#xff1a;初始化 销毁 等待 唤醒 4、实现简单的多线程程序 不唤醒则一直等待 实现线程同步 三、生产者消费者 1、借助超市模型理解 2、优点 四、基于…

Eland上传bge-base-zh-v1.5向量化模型到ElasticSearch中

最近需要做一些向量检索&#xff0c;试试ES 一、准备 系统&#xff1a;MacOS 14.3.1 ElasticSearch&#xff1a;8.13.2 Kibana&#xff1a;8.13.2 本地单机环境&#xff0c;无集群&#xff0c;也不基于Docker BGE是一个常见的文本转向量的模型&#xff0c;在很多大模型RAG应…

python基础语法--输入和输出

一、 输入 input() python使用input输入变量&#xff0c;input输入的变量为字符串形式&#xff0c;可以通过其他方式转换为整型或其他类型。 &#xff08;1&#xff09;单行读入已知个数的字符串或数字 读入字符串 # 单行读入字符串a,并给出一句输入提示 a input("请…

【汇编语言实战】求三个已知数最大值

C语言描述该程序流程&#xff1a; #include <stdio.h> int main() {int a10,b20,c15;//scanf("%d %d",&a,&b);if(a>b){if(a>c){printf("%d",c);}else{printf("%d",a);}}else{if(b>c){printf("%d",b);}else{pr…

惊!磁盘未初始化,数据如何拯救?

在数字化时代&#xff0c;磁盘作为存储数据的重要载体&#xff0c;其稳定性直接关系到数据的安全。然而&#xff0c;有时我们会遭遇一个令人头疼的问题——磁盘没有初始化。这意味着磁盘无法被操作系统正常识别和使用&#xff0c;其中的数据仿佛被锁进了一个无形的牢笼。那么&a…

2024全面启动:《水资源基础调查实施方案》解读

【引言】 去年&#xff0c;随着自然资源部《关于开展水资源基础调查工作的通知》&#xff08;自然资发〔2023〕230号&#xff09;的发布&#xff0c;一项旨在全面掌握我国水资源状况、助力生态文明建设与经济社会发展的重大工程——水资源基础调查正式启动。 近日&#xff0c…

uniapp小程序给指定的页面新增下拉刷新功能

需求:有些页面需要实时更新数据,但是又不能做实时刷新,所以给用户一个手动下拉刷新指定接口的功能 第一步:在pages.json给页面加"enablePullDownRefresh": true配置 第二步:在指定页面写onPullDownRefresh方法,和methods同级 onPullDownRefresh() {//加个定时器1秒…

在隐私计算应用中和数链具备哪些技术特点?

在加速“可信数字化”进程的背景下&#xff0c;我国区块链产业将在打造新型平台经济&#xff0c;开启共享经济新时代的同时&#xff0c;带动数字经济“脱虚向实”服务实体经济。 和数软件在加速数字化进程的同时&#xff0c;进一步服务实体经济&#xff0c;提高实体经济的活力…

windows安装Redis,Mongo,ES并快速基本掌握开发流程

前言 这里只是一些安装后的基础操作&#xff0c;后期会学习更加深入的操作 基础操作 前言RedisRedis启动idea集成Redisjedis技术 Mongodbwindows版Mongodb的安装idea整合Mongodb ES(Elasticsearch)ESwindows下载ES文档操作idea整合ES低级别ES整合高级别ES整合 Redis Redis是…

如何在项目中引入vue-router

vue3对应vue-router4 先安装最新版的vue-router pnpm i vue-router 在src目录下新建router文件夹&#xff0c;在其下创建index.js文件 在index.js文件下写 // 创建一个路由器&#xff0c;并暴露出去 // 第一步&#xff1a;引入createRouter import {createRouter,createWeb…

Terraform进阶技巧

Terraform 是管理 IaC 的强大工具&#xff0c;常用常新。在这一部分我们将探索 Terraform 的进阶技能&#xff0c;包括 Terraform 模块、远程状态存储、Terraform 工作区以及自定义 Provider。 1、Terraform 模块 Terraform 模块是可复用的 Terraform 代码包&#xff0c;其…

华为 2024 届校园招聘-硬件通⽤/单板开发——第十套

华为 2024 届校园招聘-硬件通⽤/单板开发——第十套 部分题目分享&#xff0c;完整版带答案(有答案和解析&#xff0c;答案非官方&#xff0c;未仔细校正&#xff0c;仅供参考&#xff09;&#xff08;共十套&#xff09;获取&#xff08;WX:didadidadidida313&#xff0c;加我…

搭建PyTorch神经网络进行气温预测(手写+调包两种方法)(保证学会!)+找到神经网络的最优情况

代码上有注释&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 本篇主要包括三大部分&#xff1a; 第一部分&#xff1a;导入数据集导入第三方库数据集简单介绍与可视化数据集简单预处理 第二部分&#xff1a;手写神经网络代码实现气温预测&#…

线性表概念及实现1

文章目录 前言一、线性表1.定义2.特点3.一般线性表的抽象数据类型定义 二、线性表的顺序存储&#xff08;顺序表&#xff09;1.基本概念2.数组实现顺序表3.顺序表中基本操作的具体实现 总结 前言 T_T此专栏用于记录数据结构及算法的&#xff08;痛苦&#xff09;学习历程&#…

repl_backlog原理

2.2.3.repl_backlog原理 master怎么知道slave与自己的数据差异在哪里呢? 这就要说到全量同步时的repl_baklog文件了。 这个文件是一个固定大小的数组&#xff0c;只不过数组是环形&#xff0c;也就是说角标到达数组末尾后&#xff0c;会再次从0开始读写&#xff0c;这样数组…

Stack_经典例题_最小栈

题目&#xff1a; 题目分析&#xff1a; 在满足栈的特点的同时&#xff0c;还需要设计一个接口&#xff0c;就是获取栈内的最小元素&#xff01; 解题思路&#xff1a; 因为是栈&#xff0c;所以不好遍历的&#xff01;所以这题的方式不能采用遍历的方式&#xff0c;如果采取…

文心一言 VS 讯飞星火 VS chatgpt (234)-- 算法导论17.2 2题

二、用核算法重做练习17.1-3。练习17.1-3的内容是&#xff1a;假定我们对一个数据结构执行一个由 n 个操作组成的操作序列&#xff0c;当 i 严格为 2 的幂时第 i 个操作的代价为 i &#xff0c;否则代价为1。使用聚合分析确定每个操作的摊还代价。 文心一言&#xff1a; 练习…

国产HMI芯片Model3C ——工业品质价格亲民

工业级芯片相较于消费级芯片&#xff0c;在性能上确实拥有显著的优势&#xff0c;尤其对于带彩屏显示或HMI的产品来说&#xff0c;这种优势表现得尤为突出。 首先&#xff0c;对于带彩屏显示或HMI人机交互的产品来说&#xff0c;高性能的芯片是保证流畅的用户体验和快速响应的…

中颖51芯片学习5. 类EEPROM操作

中颖51芯片学习5. 类EEPROM操作 一、SH79F9476 Flash存储空间1. 特性2. 分区3. OP_EEPROMSIZE选项设置3. 编程接口4. 代码保护控制模式简介&#xff08;1&#xff09;**代码保护模式0&#xff1a;**&#xff08;2&#xff09;**代码保护模式1&#xff1a;**&#xff08;3&#…

VS2019 VS2022 LNK2019 无法解析的外部符号sprintf

解决方案&#xff1a; 项目属性》配置属性》链接接-》输入》附加依赖项&#xff0c;增加 legacy_stdio_definitions.lib legacy_stdio_definitions.lib 是一个库文件&#xff0c;通常与使用 Visual Studio 编译的 C/C 项目相关。它的作用是解决在使用新版本的 Visual Studio 编…