LC1523.在区间范围内统计奇数数目

news2024/10/18 23:09:22

在这里插入图片描述
一开始没审题,居然构造了一个数组去做…在这里插入图片描述

  • 然后重新看,首先先想到的暴力解就是遍历low到high,然后每一个数都对二取余。但是这样的暴力解就没什么锻炼

  • 那肯定再想一个思路,Low和high都有两种情况,要么是奇数,要么是偶数。
    那么一共就四种情况然后又因为奇数是偶数相邻的,所以说我们很大概率可以研究其中一种情况,然后把其他情况转化成那个情况。

  • 思路和代码如下

    int countOdds(int low, int high) {
       // [low,high] 共 high -low + 1个数字
       // 开区间的话是 high - low - 1个数字
       
       //可以分为几种情况
       //两个端点分别可能是奇数和偶数,那么2x2=4种
     
       // 端点是奇偶和偶奇则是一样的,开区间有偶数个数字
       // 其中奇数个数便是 (high-low - 1)/2个
       int addOfEdge = low + high;
       if(addOfEdge % 2 == 1)
           return (high - low - 1)/2 + 1;
       else
       // 端点之和是偶数,端点是奇奇和偶偶,如果再分类也可以,但是可以同意变成上面的情况
       {
           // 偶偶的话,可以low+1 high-1 先变成奇奇的情况)
    
           // 那就统一成了奇奇的情况:如果high再+1,又变成了奇偶的情况,且不增加奇数个数
           if(low % 2 ==0)
           {
               low +=1;
               high -=1;
           }
           high += 1;
           return (high - low - 1)/2 + 1;
    
       }
    
    
    
  • 继续优化,还有个很常见的思路:大的减去小的,考研数学里面分区域也常用
    我们可以找一个相同的起点:0
    区间可以划分为[0,high]和[0,low-1]
    先统一成[0,x]研究
    [0,x]有多少奇数呢?
    我们纠结的点无非在于奇数偶数,那么就先找两个相邻的来研究
    比如说[0,3]是1,3
    [0,4]是1,3
    [0,5]是1,3,5
    [0,6]是1,3,5
    肯定会想到除以2(是向下取整的),那就看看什么情况
    3/2=1,4/2=2,5/2=2,6/2=3
    所以如果x是偶数,可以不加1,但是加1没影响,如果x是奇数,x要+1才能得到正确的结果,所以可以统一成 (x+1 )/2
    因此就是(high+1)/2 - (low-1+1)/2

    int countOdds(int low, int high) {
        // 计算区间内的奇数个数
        return (high + 1) / 2 - low / 2;}
    

    上面有些啰嗦,让AI精炼我的表达
    在这里插入图片描述

  • 官方题解:位运算,应该是更高效一些

    int pre(int x) {
        return (x + 1) >> 1; 
        // 意思是 x + 1 除以 2,即 x 除以 2 向上取整
      
    }
    
    // 计算区间 [low, high] 内的奇数个数
    int countOdds(int low, int high) {
        return pre(high) - pre(low - 1);
    }
    
  • 和copilot聊聊,让它评价一下暴力解
    在这里插入图片描述

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

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

相关文章

30.第二阶段x86游戏实战2-遍历周围-C++遍历二叉树(玩家角色基址)

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 本次游戏没法给 内容参考于:微尘网络安全 本人写的内容纯属胡编乱造,全都是合成造假,仅仅只是为了娱乐,请不要…

衡石分析平台系统分析人员手册-应用查看

应用查看​ 应用创作界面展示了用户可以查看的所有应用。 用户可以使用平铺视图或列表视图查看应用。同时支持通过搜索、过滤、排序等方式快速查找应用。 应用视图​ 应用创作支持平铺视图和列表视图两种展示方式,默认以平铺视图的方式展示应用,用户可…

2024 蚂蚁SEO蜘蛛池对网站收录的帮助

《2024 蜘蛛池对网站收录还有效果吗?》 在网站优化的领域中,蜘蛛池曾经是一个备受关注的工具。然而,随着搜索引擎算法的不断演进,人们对于 2024 年蜘蛛池对网站收录是否还有效果产生了疑问。 一、什么是蜘蛛池? 蜘蛛池…

APQP在制造行业的应用:搭上数字化项目管理平台很nice

APQP(Advanced Product Quality Planning,即产品质量先期策划)最早由汽车行业引入,并因其在质量管理方面的显著效果而逐渐被其他制造业领域所采纳。 APQP提供了一种从产品设计的最初阶段到生产过程的全面质量管理框架,…

使用fpm工具制作Vim.rpm包

背景:生产环境中的CentOS 7在安全扫描中被扫描出vim存在堆缓冲区溢出(CVE-2024-45306)等漏洞。根据漏洞说明,需要升级到最新版。 奈何CentOS 7已经停止维护了,所以,想在网上找一个最新版的vim.rpm相当不容易…

数字图像处理:图像复原应用

数字图像处理:图像复原应用 1.1 什么是图像复原? 图像复原是图像处理中的一个重要领域,旨在从退化(例如噪声、模糊等)图像中恢复出尽可能接近原始图像的结果。图像复原与图像增强不同,复原更多地依赖于图…

ES6 Promise的用法

学习链接:ES6 Promise的用法,ES7 async/await异步处理同步化,异步处理进化史_哔哩哔哩_bilibili 一、同步与异步区别 1.JavaScript代码是单线程的程序,即通过一行一行代码顺序执行,即同步概念。 2.若处理一些简短、…

数据结构部分混淆

1.随机存储和顺序存储: 随机存取:数组,当存储器中的数据被读取或写入时,所需要的时间与该数据所在的物理地址无关 顺序存取:链表,当存储器中的数据被读取或写入时,所需要的时间与该数据所在的物…

力扣之1412.查找成绩处于中游的学生

题目: sql建表语句: Create table If Not Exists Student (student_id int, student_name varchar(30)); Create table If Not Exists Exam (exam_id int, student_id int, score int); Truncate table Student; insert into Student (student_id,…

linux环境下的程序设计与git操作

目录 前言: 进度条小程序: 先介绍几个背景知识 代码实现 Git操作 总结 其他指令 前言: 本文将重点介绍1. linux下的程序设计,并使用linux下的几个函数接口。实现一个简单的小程序 2.本着开源精神,进行git操作。…

OPENSSL-2023/11/10学习记录-C/C++对称分组加密DES

对称分组加密常用算法: DES 3DES AES 国密SM4 对称分组加密应用场景: 文件或者视频加密 加密比特币私钥 消息或者配置项加密 SSL通信加密 对称分组加密 使用异或实现一个简易的对称加密算法 A明文 B秘钥 AB密文AB (AB)B A 密码补全和初始化 数…

在Access中执行SQL语句

1.新建一个查询 2. 关闭弹出的窗口,创建一个空查询 3. 在“设计”页中点击“数据定义”进入输入SQL语句界面 4. “执行”后就能看到执行结果 5.如果想再次执行SQL,则可在MDI窗口标题栏右键,在弹出的菜单中选择“SQL 视图”即可

Vue向上滚动加载数据时防止内容闪动

目前的需求:当前组件向上滚动加载数据,dom加载完后,页面的元素位置不能发生变化 遇到的问题:加载完数据后,又把滚轮滚到之前记录的位置时,内容发生闪动 现在的方案: 加载数据之前记录整体滚动条…

Spring AI 整体介绍_关键组件快速入门_prompt_embedding等

Spring AI:Java开发者的AI集成新利器 在过去,Java开发者在构建AI应用时面临着缺乏统一框架的问题,导致不同AI服务的集成过程复杂且耗时。Spring AI应运而生,旨在为基于Java的应用程序提供一个标准化、高效且易于使用的AI开发平台…

51单片机的超声波视力保护仪【proteus仿真+程序+报告+原理图+演示视频】

1、主要功能 该系统由AT89C51/STC89C52单片机LCD1602显示模块温度传感器光照传感器超声波传感器按键、LED、蜂鸣器等模块构成。适用于视力保护仪、坐姿矫正器、超声波防近视等相似项目。 可实现功能: 1、LCD1602显示温度、光照、距离和学习时间 2、超声波传感器采集头部与探…

如何做好SQL 数据库安全

随着信息技术的迅猛发展,数据库在现代信息系统中的重要性日益凸显。无论是电子商务平台、金融系统还是社交媒体应用,数据库都是其核心组件之一。其中,SQL(Structured Query Language,结构化查询语言)数据库…

效率飞跃 | SOLIDWORKS 2025:草图与装配体设计再升级!

一年一度的SOLIDWORKS新版本已经发布,快来看看SOLIDWORKS 2025这些让您眼前一亮的新功能,它们将为您的研发过程增添强大助力。 一、草图绘制 1、通过 XYZ 点生成的曲线可以选取坐标系统 新版本可选择曲线起点位置 2、转换实体作为构造几何体 转换实体…

Science Robotics 通过新材料打造FiBa软机器人 可实现四种形态进化

近几年由于材料科学的进步,软机器人相关技术近几年研究成果显著,与传统的刚性机器人相比,软机器人的设计灵感来源于自然界中的生物系统,如蠕虫、章鱼、壁虎和青蛙等。这些生物利用柔软、有弹性的材料,在复杂环境中展现…

微服务基础架构(图)

微服务基础架构是一种现代化的软件架构模式,旨在将大型复杂的应用程序拆分为多个小型、独立的服务。每个微服务专注于特定的业务功能,可独立开发、部署和扩展。 在微服务基础架构中,通常会使用轻量级的通信机制,如 RESTful API 或…

C++简易日志系统:打造高效、线程安全的日志记录工具

目录 引言: 1.日志的基本概念 1.1.什么是日志? 1.2.我们为什么需要日志? 2.自己实现一个简易日志 2.1.日志的等级 2.2日志的格式 2.3.获取时间的方法 2.4.日志的主体实现 参数: 代码解析: 问题&#xff1a…