Leetcode刷题笔记7

69. x 的平方根

69. x 的平方根 - 力扣(LeetCode)

假设求17的平方根

解法一:暴力解法

从1开始依次尝试
比如1的平方是1,2的平方是4...直到5的平方,25>17,所以一定是4点几的平方,所以等于4

1  2  3  4  5  6  7
1  4  9  16 25 36 49

寻找二段性

可以把这些数抽象成一段横线

             ret
------------*--------------

ret左边的区域的平方后全是小于等于x,从这个位置开始右边的区域平方后全大于x

解法二:二分查找

先定义一个L(从1开始),一个R(x)
查找区间应该是从1到x

1. mid*mid <= x -> 落在左边区间,更新left指针,left = mid

2. mid*mid > x -> 落在右边区间,更新right指针,right = mid - 1 

代码:C++

class Solution {
public:int mySqrt(int x) {// x 有可能小于1if(x < 1) return 0; // 处理边界情况int left = 1, right = x;while(left < right){long long mid = left + (right - left + 1) / 2; // long long防溢出if(mid*mid <= x) left = mid;else right = mid - 1; // 根据模版,这里出现减法,就把求mid那里加1即可}return left;}
};

35. 搜索插入位置

35. 搜索插入位置 - 力扣(LeetCode)

寻找二段性

第一种情况:直接找到target

第二种情况:找不到target,要找插入位置

插入的位置应该是第一次比它大的这个数前面,或者最后
最终找到位置的这个值应该是大于等于target的
左边的区域全都小于target

[小于t][大于等于t           ]
-------------------------------
         ret

1. x < t -> left = mid + 1

2. x >= t -> right = mid

代码:C++

class Solution {
public:int searchInsert(vector<int>& nums, int target) {int left = 0, right = nums.size() - 1;while(left < right){int mid = left + (right - left) / 2;if(nums[mid] < target) left = mid + 1;else right = mid;}// 如果target插入位置在数组最后if(nums[left] < target) return left + 1; // right + 1也是对的,因为left和right已经相遇了return left;}
};

852. 山脉数组的峰顶索引

852. 山脉数组的峰顶索引 - 力扣(LeetCode)

先上升,到山顶,然后再下降

解法一:暴力枚举

定义一个指针从开始如果前一个数后一个数就不会是峰值,直接到下一个位置
当扫描到第一次数是大于后面的数的时候就是峰顶

时间复杂度:O(N)

优化:
山顶左边区间所有数都是大于前一个数,右边区间所有数都是小于前一个数

解法二:二分查找

二段性 - 能把数组分成两部分
中间值的下标为mid

1. 如果落在左边区间,mid包含在了最终结果里面,接下来去右边区间找
arr[mid] > arr[mid - 1] -> left = mid

2. 落在右边区间,要到左边区域找
arr[mid] < arr[mid - 1] -> right = mid - 1

代码:C++

class Solution {
public:int peakIndexInMountainArray(vector<int>& arr) {int left = 1, right = arr.size() - 2; // 抛开第一个和最后一个位置while(left < right){int mid = left + (right - left + 1) / 2;if(arr[mid] > arr[mid - 1]) left = mid;else right = mid - 1;}return left;}
};

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

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

相关文章

WSL2-Ubuntu22.04-配置

WSL2-Ubuntu22.04-配置 准备1. WSL相关命令[^1]2. WSL2-Ubuntu22.04可视化3. WSL2 设置 CUDA4. 设置OpenGL 本文介绍了WSL2的基本使用方法及可视化&#xff0c;着重介绍了GPU和OpenGL的设置。 准备 名称版本windows11wsl2CUDA12.5 1. WSL相关命令1 查看已安装的wsl distribut…

官方小游戏项目

一 项目原理&#xff1a;看广告&#xff0c;操作简单&#xff0c;时间自由&#xff0c;适合利用业余时间来做&#xff0c;一个广告大概在15s-30s之间。 二 介绍&#xff1a;给你开代理权限&#xff0c;你就有独立后台管理系统&#xff0c;监测每台手机每条广告的情况&#xff0…

MySQL数据表的“增删查改“

我们学习数据库, 最重要的就是要学会对数据表表进行"增删查改"(CRUD).(C -- create, R -- retrieve, U -- update, D -- delete) 目录 一. "增"(create) 1. 普通新增 2. 指定列新增 3. 一次插入多行 4. 用insert插入时间 5. 小结 二. "查"…

AI科技,赋能企业财务管理

AI技术已深入千行百业&#xff0c;其实际任务解决能力愈发凸显和强劲。正如乔布斯所强调“技术不是为工程师而生&#xff0c;而是为应用而生”。 胜意科技深度集成业内领先技术&#xff0c;将AI融入到实际的财务工作流中&#xff0c;与OCR、RPA等智能技术组合式输出&#xff0c…

Qt-qrencode生成二维码

Qt-qrencode开发-生成二维码&#x1f4c0; 文章目录 Qt-qrencode开发-生成二维码&#x1f4c0;[toc]1、概述&#x1f4f8;2、实现效果&#x1f4bd;3、编译qrencode&#x1f50d;4、在QT中引入编译为静态库的QRencode5、在Qt中直接使用QRencode源码6、在Qt中使用QRencode生成二…

Django Celery技术详解

文章目录 简介安装和配置创建并调度任务启动Celery Worker在视图中调用异步任务拓展功能 简介 Django Celery 是一个为Django应用程序提供异步任务处理能力的强大工具。它通过与消息代理&#xff08;如RabbitMQ、Redis&#xff09;集成&#xff0c;可以轻松地处理需要长时间运…

LAMP分布式安全方案搭建网页 (LinuxCentOS7+Apache+Mariadb+PHP)包括服务端口及防火墙规则配置

目录 一、实验目的 二、设计方案及规划 三、实验内容及步骤 &#xff08;1&#xff09;实验前基础配置 &#xff08;2&#xff09;Test配置&#xff0c;安装Firefox浏览器和图形界面 &#xff08;3&#xff09;Web安装Apache &#xff08;4&#xff09;Database安装Mari…

微服务架构-微服务架构的挑战与微服务化的具体时机

目录 一、微服务架构的挑战 1.1 概述 1.2 服务拆分 1.3 开发挑战 1.4 测试挑战 1.4.1 开箱即用、一键部署的集成环境 1.4.2 测试场景和测试确定性 1.4.3 微服务相关的非功能测试 1.4.4 自动化测试 1.5 运维挑战 1.5.1 监控 1.5.2 部署 1.5.3 问题追查 1.5.4 依赖管…

高等教育的AI革新:OpenAI面向大学推出ChatGPT Edu

OpenAI推出了ChatGPT Edu&#xff0c;这是一个为大学设计的专用版本&#xff0c;旨在让学生、教职员工、研究人员和校园运营能够负责任地使用AI。 ChatGPT Edu 将AI技术引入了教育领域&#xff0c;其建立在GPT-4o的基础上&#xff0c;它不仅能够处理文本和图像&#xff0c;还…

【机器学习】深入探索机器学习:线性回归算法的原理与应用

❀线性回归算法 &#x1f4d2;1. 引言&#x1f4d2;2. 线性回归的基本原理&#x1f389;回归方程&#x1f389;最小化误差&#x1f389;线性回归的假设条件 &#x1f4d2;3. 线性回归算法的实现&#x1f4d2;4. 线性回归算法的特征工程&#x1f4d2;5. 线性回归模型评估与优化&…

【学习笔记】数据结构(二)

线性表 文章目录 线性表1、线性结构2、线性表2.1 线性表定义2.2 类型定义2.2 顺序存储结构&#xff08;Sequence List&#xff09;2.3 链式存储结构2.3.1 单链表2.3.2 循环链表2.3.3 双链表2.3.4 单链表、循环链表、双向链表的时间效率比较2.3.5 链式存储结构优缺点 2.4 顺序表…

【数字化风向标】合合信息重磅登陆CDIE 2024:引领创新,门票惊喜大放送!

官.网地址&#xff1a;合合TextIn - 合合信息旗下OCR云服务产品 6月25-26日&#xff0c;CDIE 2024 数字化创新博览会将在上海张江科学会堂举行。本届展览规模3300㎡&#xff0c;展位数量100&#xff0c;重点打造四大核心特色主题展区&#xff0c;包括行业数字化创新展区、企业…

智和信通助力中国移动湖南某市分公司县级政府外网运维项目

中国移动湖南某市分公司承建市下属某县政务外网网络建设项目&#xff0c;且在网络建设完工后&#xff0c;承担起运维职责&#xff0c;随着工作的推进市移动公司发现仅靠人力难以高效开展运维工作。 设备类型&#xff1a;OLT、ONU等通信设备 设备品牌&#xff1a;华为、中兴等…

TQSDRPI开发板教程:实现LWIP自环

项目资源分享 链接&#xff1a;https://pan.baidu.com/s/1QckFYSwua-Fpxk3tewledQ 提取码&#xff1a;bewt 打开vivado2019.1创建工程 下一步 设置工程名称与地址。勾选reate…选项&#xff0c;会创建一个新的文件夹&#xff0c;项目保存在其中&#xff0c;文件夹名称与工程名…

【数据库】MySQL表的操作

目录 一.创建表 二.查看表 三.修改表 四.删除表 一.创建表 基本语法&#xff1a; CREATE TABLE table_name(field1 datatype,field2 datatype,field3 datatype) character set 字符集 collate 校验规则 engine 储存引擎field表示列名 datatype表示列的类型 charatcer se…

L1527射频编码芯片 百万组通用编码器,可替代EV1527

L1527 是CMOS 结构的预烧内码&#xff08;遥控中的地址码&#xff09;通用编码器&#xff0c;内有 20 位可预烧写 100 万组内码组合&#xff0c;使得重码率很低&#xff0c;具有更高安全性。芯片内集成误操作禁止功能&#xff0c;在按键输入有效且状态不变时&#xff0c;芯片连…

生产现场的作业标准化,这么做就对了!

制造型企业的生产过程是以计划的成本、工时生产出达到客户要求的产品。如果在制造过程中&#xff0c;产品工艺、作业方法或作业条件有所变化的话&#xff0c;一定无法生产出符合上述要求的产品。 因此&#xff0c;公司领导必须对作业工艺流程、作业方法、作业条件进行标准化管…

全是干货:融资融券(两融)名词科普!

一、两融内涵 融资融券&#xff0c;也被称为证券信用交易&#xff0c;其内涵主要涵盖以下方面&#xff1a; 首先&#xff0c;它指的是投资者向具有融资融券业务资格的证券公司提供担保物&#xff0c;并借入资金用于买入证券&#xff08;融资交易&#xff09;或借入证券并卖出&…

kettle 使用动态变量名定义变量

name是变量&#xff0c;value 值也是变量 我需要把name作为变量名&#xff0c;value作为变量值&#xff1b; 在kettle中&#xff0c;使用javascript脚本 key与lastVsxzl都是变量 //Script here setVariable(key,lastVsxzl,r);var rgetVariable(key,r); Demo 1、从记事本里面…

Python中限制输入数值范围的技术性探讨

目录 一、引言 二、使用内置函数限制输入范围 三、使用条件语句进行范围检查 四、使用异常处理增强鲁棒性 五、结合第三方库进行输入验证 六、总结 一、引言 在Python编程中&#xff0c;用户输入是程序与用户交互的重要方式之一。然而&#xff0c;由于用户输入的多样…