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 有可能小于1
        if(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.mfbz.cn/a/666317.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

YAML快速编写示例

一、案例 1.1 自主式创建service关联上方的pod 资源名称my-nginx-kkk命名空间my-kkk容器镜像nginx:1.21容器端口80标签njzb:my-kkk 1.1.1 创建一个demo文件夹 1.1.2 创建并获取模版文件 1.1.3 查看服务并编写yaml文件 1.1.4 编写yaml文件并部署&#xff0c;查看服务是否运行成…

Nginx过滤指定日志不输出

参考Nginx过滤指定日志不输出 | LogDicthttps://www.logdict.com/archives/nginxguo-lu-xin-tiao-ri-zhi

File(文件)

File对象表示一个路径&#xff0c;可以是文件的路径&#xff0c;也可以是文件夹的路径。 这个路径可以存在&#xff0c;也允许不存在。 创建File对象的方法 public class test {public static void main(String [] args) {//根据字符串创建文件String str"C:\\Users\\PC…

FFmpeg 中 Filters 使用文档介绍

描述 这份文档描述了由libavfilter库提供的过滤器Filters、源sources和接收器sinks。 滤镜介绍 FFmpeg通过libavfilter库启用过滤功能。在libavfilter中,一个过滤器可以有多个输入和多个输出。为了说明可能的类型,我们考虑以下过滤器图: 这个过滤器图将输入流分成两个流,然…

Source Insight 变量高亮快捷键F8 失效

SourceInsight4.0&#xff0c;使用的时候&#xff0c;高亮快捷键F8突然不能用了 查半天发现&#xff0c;是用了“有道翻译”的原因&#xff0c;热键冲突&#xff0c;如下&#xff0c;把下面的热键换一个就好了

【第七节】C++的STL基本使用

目录 前言 一、STL简介 1.1 STL基本概念 1.2 STL六大组件 1.3 STL优点 二、STL三大组件 2.1 容器 2.2 算法 2.3 迭代器 三、STL常见的容器 3.1 string容器 3.1.1 string容器基本概念 3.1.2 string容器的常用操作 3.1.2.1 string 构造函数 3.1.2.2 string 基本赋…

【AVL Design Explorer DOE】

AVL Design Explorer DOE 1、关于DOE的个人理解2、DOE参考资料-知乎2.1 DOE发展及基本类型2.2 DOE应用场景2.3 Mintab 中的 DOE工具3、AVL Design Explorer DOE示例 1、关于DOE的个人理解 仿真和试验一样&#xff0c;就像盲人摸象&#xff0c;在不知道大象的全景之前&#xff…

SpringCloud学习笔记(一)

SpringCloud、SpringCloud Alibaba 前置知识&#xff1a; 核心新组件&#xff1a; 所用版本&#xff1a; 学习方法&#xff1a; 1.看理论&#xff1a;官网 2.看源码&#xff1a;github 一、微服务理论知识 二、关于SpringCloud各种组件的停更/升级/替换 主业务逻辑是&#x…

Mysql基础教程(11):DISTINCT

MySQL DISTINCT 用法和实例 当使用 SELECT 查询数据时&#xff0c;我们可能会得到一些重复的行。比如学生表中有很多重复的年龄。如果想得到一个唯一的、没有重复记录的结果集&#xff0c;就需要用到 DISTINCT 关键字。 MySQL DISTINCT用法 在 SELECT 语句中使用 DISTINCT 关…

jsmug:一个针对JSON Smuggling技术的测试PoC环境

关于jsmug jsmug是一个代码简单但功能强大的JSON Smuggling技术环境PoC&#xff0c;该工具可以帮助广大研究人员深入学习和理解JSON Smuggling技术&#xff0c;并辅助提升Web应用程序的安全性。 背景内容 JSON Smuggling技术可以利用目标JSON文档中一些“不重要”的字节数据实…

判断自守数-第13届蓝桥杯选拔赛Python真题精选

[导读]&#xff1a;超平老师的Scratch蓝桥杯真题解读系列在推出之后&#xff0c;受到了广大老师和家长的好评&#xff0c;非常感谢各位的认可和厚爱。作为回馈&#xff0c;超平老师计划推出《Python蓝桥杯真题解析100讲》&#xff0c;这是解读系列的第75讲。 判断自守数&#…

发电机组故障的原因、解决方案及解决措施

发电机组故障的原因、解决方案及解决措施可以总结如下&#xff1a; 一、故障原因 供电中断 原因&#xff1a;电网故障、线路短路或电力负荷过重等。 燃油问题 原因&#xff1a;燃油供应系统问题&#xff0c;如燃油管路堵塞、燃油质量不佳等。 轴承过热 原因&#xff1a;轴承过…

Android 11 Audio音频系统配置文件解析

在AudioPolicyService的启动过程中&#xff0c;会去创建AudioPolicyManager对象&#xff0c;进而去解析配置文件 //frameworks/av/services/audiopolicy/managerdefault/AudioPolicyManager.cpp AudioPolicyManager::AudioPolicyManager(AudioPolicyClientInterface *clientIn…

19.1 简易抽奖

准备一个数组&#xff0c;里面添加10个奖品数据&#xff0c;让奖品数据快速的在盒子中随机显示&#xff0c;通过按钮控制盒子里面的内容停止。 效果图&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8">&…

01-1.2.3 算法的空间复杂度

什么是空间复杂度&#xff1f; 代码在运行之前需要先装入内存&#xff0c;程序代码需要占一定的位置&#xff08;在这边假设是100B&#xff09; 定义的变量和参数i&#xff0c;n都需要占用内存空间 //算法一——逐步递增型 void loveYou(int n) { //n为问题规模int i 1; /…

红色文化VR虚拟线上云展馆将烈士纪念馆的宏伟全貌细致入微地呈现在您的眼前

在手机屏幕上轻轻滑动&#xff0c;即刻启程一场别开生面的线上打卡之旅。720全景线上展馆是深圳VR公司华锐视点运用先进的web3d开发和VR虚拟现实技术&#xff0c;将烈士纪念馆的宏伟全貌细致入微地呈现在您的眼前。 720全景线上展馆敢于打破时空的界限&#xff0c;带您回到那段…

618 购物指南:简单点 618 捡便宜,用这个利器就行

直接干货&#xff0c;看效果&#xff0c;安装脚本直接显示商家额外优惠券&#xff1a; 1、安装好脚本后&#xff0c;打开京东、淘宝(天猫) 商品详情页面&#xff0c;脚本会自动获取优惠券进行展示。 2、如果当前商品 处于 30 天最低价&#xff0c;脚本将自动进行标记 提醒&…

input输入框的一些复习

<template><div><div style"text-align: center;margin: 10px 0;"><span style"font-size: 15px;font-weight: bold;">input输入框的基本应用</span></div><el-descriptions :column"3" size"defau…

现如今AI大环境究竟怎样?

遇到难题不要怕&#xff01;厚德提问大佬答&#xff01; 厚德提问大佬答10 你是否对AI绘画感兴趣却无从下手&#xff1f;是否有很多疑问却苦于没有大佬解答带你飞&#xff1f;从此刻开始这些问题都将迎刃而解&#xff01;你感兴趣的话题&#xff0c;厚德云替你问&#xff0c;你…

VR导航的实现原理、技术优势和应用场景

VR导航通过虚拟现实技术提供沉浸式环境&#xff0c;结合室内定位技术实现精准导航。目前&#xff0c;VR导航已在多个领域展现出其独特的价值和潜力&#xff0c;预示着智能导航系统的未来发展。 一、实现原理 VR导航技术依托于虚拟现实(VR)和室内定位系统。VR技术利用计算机模…