Leetcode刷题笔记7

news2025/1/23 12:01:41

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.coloradmin.cn/o/1718906.html

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

相关文章

打家劫舍I 打家劫舍II (leetcode)

个人主页&#xff1a;Lei宝啊 愿所有美好如期而遇 打家劫舍Ihttps://leetcode.cn/problems/Gu0c2T/打家劫舍IIhttps://leetcode.cn/problems/PzWKhm/ 状态转移方程就是这样的&#xff1a; i位置选择偷f[i]&#xff1a;f[i] g[i-1] nums[i];i位置选择不偷g[i]&#xff1a;g…

C语言 指针——指针变量做函数参数:典型实例

目录 一个典型实例——两数互换 一个典型实例——两数互换 Errors

拓展虚拟世界边界,云手机可以做到吗

虚拟世界&#xff0c;AI&#xff0c;VR等词汇是21世纪最为流行的词汇&#xff0c;在科技背后&#xff0c;这些词汇的影响变得越来越大&#xff0c;已经走进了人们的世界&#xff0c;比如之前APPLE发布的vision pro&#xff0c;使人们能够更加身临其境的体验到原生os系统&#x…

存储 Bean 对象更加简单的方式

前置操作 如果是在 spring-config 中添加 bean 标签来注册内容&#xff0c;每个类都要弄一次就显得麻烦和臃肿了&#xff0c;对于 new 操作而言就没有什么优势了。因此 spring 就引入了注解操作来实现对 Bean 对象的存储。 配置扫描路径 想要将对象成功的存储到 Spring 中&…

【Linux系列】深入解析 `kill` 命令:Linux 下的进程管理利器

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

【每日力扣】32. 最长有效括号 416. 分割等和子集

&#x1f525; 个人主页: 黑洞晓威 &#x1f600;你不必等到非常厉害&#xff0c;才敢开始&#xff0c;你需要开始&#xff0c;才会变的非常厉害 32. 最长有效括号 给你一个只包含 ( 和 ) 的字符串&#xff0c;找出最长有效&#xff08;格式正确且连续&#xff09;括号 子串 …

民国漫画杂志《时代漫画》第34期.PDF

时代漫画34.PDF: https://url03.ctfile.com/f/1779803-1248636026-7e46c5?p9586 (访问密码: 9586) 《时代漫画》的杂志在1934年诞生了&#xff0c;截止1937年6月战争来临被迫停刊共发行了39期。 ps: 资源来源网络!

亚马逊云科技峰会盛大举行 | 光环新网携光环云数据以高性能智算服务助力企业创新发展

2024年5月29日&#xff0c;云计算行业的年度盛典”2024亚马逊云科技中国峰会”在上海世博中心再次盛大启幕。作为全球领先的云计算服务提供商&#xff0c;亚马逊云科技峰会聚焦前沿科技&#xff0c;与来自不同行业、不同科技领域的优秀企业和用户共同探索AI时代的云端创新发展。…

mysql大表的深度分页慢sql案例(跳页分页)-2

1 背景 有一张大表&#xff0c;内容是费用明细表&#xff0c;数据量约700万级&#xff0c; 普通B树索引KEY idx_fk_fymx_qybh_xfsj (qybh,xfsj)。 1.1 原始深度分页sql select t.* from fk_fymx t where t.qybh XXXXXXX limit 100000,100; 深度分页会导致加载数据行过多1000001…

协方差矩阵如何能看出多元随机变量的分布情况

协方差矩阵可以通过以下几个方面帮助我们理解多元随机变量的分布情况&#xff1a; 变量的方差&#xff08;对角线元素&#xff09;&#xff1a; 协方差矩阵的对角线元素表示各个变量的方差。方差反映了每个变量本身的离散程度。方差越大&#xff0c;表示该变量在其均值周围的波…

【计算机视觉(6)】

基于Python的OpenCV基础入门——图像的几何变换&#xff08;2&#xff09; 仿射变换透视变换仿射变化和透视变换的代码实现&#xff1a; 仿射变换 仿射变换是一种仅在二维平面中发生的几何变形&#xff0c;通俗的理解原来的直线变换之后还是直线&#xff0c;平行线变换之后还是…

[ubuntu18.04]搭建mptcp测试环境说明

MPTCP介绍 Multipath TCP — Multipath TCP -- documentation 2022 documentation 安装ubuntu18.04&#xff0c;可以使用虚拟机安装 点击安装VMware Tool 桌面会出现如下图标 双击打开VMware Tools&#xff0c;复制如下图所示的文件到Home目录 打开终端&#xff0c;切换到管…

100道面试必会算法-27-美团2024面试第一题-前缀和矩阵

100道面试必会算法-27-美团2024面试第一题-前缀和矩阵 问题解读 给定一个 n x n 的二进制矩阵&#xff0c;每个元素是 0 或 1。我们的任务是计算矩阵中所有边长为 k 的子矩阵中&#xff0c;包含特定数量 1 的情况。例如&#xff0c;我们希望找到所有边长为 k 的子矩阵中包含 k…

【面试八股总结】MySQL事务:事务特性、事务并行、事务的隔离级别

参考资料&#xff1a;小林coding 一、事务的特性ACID 原子性&#xff08;Atomicity&#xff09; 一个事务是一个不可分割的工作单位&#xff0c;事务中的所有操作&#xff0c;要么全部完成&#xff0c;要么全部不完成&#xff0c;不会结束在中间某个环节。原子性是通过 undo …

Apache Druid 代码执行(CVE-2021-25646)漏洞复现

Druid简介与漏洞成因 Apache Druid是一个高性能的实时分析型数据库&#xff0c;旨在对大型数据集进行快速查询分析。Druid最常被当做数据库来用以支持实时摄取、高性能查询和高稳定运行的应用场景&#xff0c;同时&#xff0c;Druid也通常被用来助力分析型应用的图形化界面&am…

【方法】如何取消PPT“以只读方式打开“?

以“只读方式”打开的PPT&#xff0c;可能会受到不同的限制&#xff0c;比如无法编辑修改内容&#xff0c;无法保存原文件等。那如何取消PPT的“只读方式”呢&#xff1f;不同形式的“只读方式”&#xff0c;取消方法不同&#xff0c;下面一起来看看吧&#xff01; “只读方式”…

达梦数据库(五) -------- 达梦数据库+mybatisPlus+springboot

前言&#xff1a;安装完达梦数据库后&#xff0c;需要初始化实例&#xff0c;在初始化实例时&#xff0c;需要注意大小写敏感的设置。大小写敏感只能在初始化数据库的时候设置&#xff0c;默认为大小写敏感&#xff0c;一旦设置成功就无法修改&#xff0c;如果想要修改&#xf…

景源畅信:抖音的爆款视频怎么选?

在短视频风起云涌的今天&#xff0c;抖音作为其中的佼佼者&#xff0c;每天都有无数视频在这里诞生。但如何在内容海洋中脱颖而出&#xff0c;成为人们茶余饭后谈论的焦点&#xff0c;是许多创作者和品牌思考的问题。选择爆款视频&#xff0c;不仅需要对平台规则有深刻理解&…

汾阳王发布T系列新品,百亿之路始于山西

执笔 | 文 清 编辑 | 古利特 山西汾阳王酒业董事长王再武提出要把握汾阳王发展的春天之后&#xff0c;其首个大动作来了。 随着汾阳王T系列新品上市&#xff0c;锚定清香第二大中高端品牌的汾阳王开启了山西市场改革&#xff0c;吹响了山西省内市场决胜之战的号角。 在对品牌…

Web前端复习二(期末考试考到了一部分)

第一章测试 选项中加粗的为答案 1.图片的边框可以通过( )设定宽度。 A.width B.height C.border D.align 2.关于超链接&#xff0c;( )属性用于规定在何处打开链接文档。 A.href . B.target C.title D.onclick 3.( )是在新窗口打开网页文档。 A _blank B_self C_…