Leetcode刷题笔记8

162. 寻找峰值

162. 寻找峰值 - 力扣(LeetCode)

对于所有有效的 i 都有 nums[i] != nums[i + 1]

解法一:暴力解法

从第一个位置一直向后走,然后分情况即可
1. 第二个元素就往下降,那么第一个元素就是峰顶

2. 一直遍历,直到找到下一个元素比前一个元素小

3. 一直遍历没发现下一个元素比前一个元素小,这时返回最后一个元素

时间复杂度:O(N)

解法二:优化暴力解法 - 二分查找


               i  i+1
------------*-*-----------

1. arr[i] > arr[i+1] 
那么此时是一个下降趋势,那么在左边区间一定存在一个峰值,一定存在最终结果
右边不一定,接下来在左边寻找

2. arr[i] < arr[i+1]
那么此时是一个上升趋势,那么在右边区间一定存在一个峰值
左边不一定,接下来在右边寻找

此时发现二段性,可以把数组分成两部分

第一种情况:arr[mid] > arr[mid+1] -> right = mid(包含i,i也可能是峰值)

第二种情况:arr[mid] < arr[mid+1] -> left = mid + 1

代码:C++

class Solution {
public:int findPeakElement(vector<int>& nums) {int left = 0, right = nums.size() - 1;while(left < right){int mid = left + (right - left) / 2;if(nums[mid] > nums[mid + 1]) right = mid;else left = mid + 1;}return left;}
};

153. 寻找旋转排序数组中的最小值

153. 寻找旋转排序数组中的最小值 - 力扣(LeetCode)

解法一:暴力查找最小值

[3,4,5,1,2]
从前往后遍历即可

时间复杂度:O(N)
[3,4,5,1,2]


可以分解为两段,一段有上升趋势,峰值过后的那一段也是上升趋势

解法二:二分查找

二段性:
          B
         /
        /
       /
     A
--------------------------------------------------------
                            D
                           /
                          /
                         /
                        C

AB这段区域是严格大于D点这个值的
CD这段区域是严格小于等于D点这个值的

1. AB这段区域: nums[i] > nums[n-1]
2. CD这段区域: nums[i] <= nums[n-1]

如果是第一种情况:nums[mid] > nums[n-1] -> left = mid + 1
当落在AB的时候没有要找的结果,所以要到右边去找

如果是第二种情况:nums[mid] <= nums[n-1] -> right = mid
mid落在CD,去左边区域寻找,但是right不能越过C点

最后会停在c点,c点就是最小值

代码:C++

class Solution {
public:int findMin(vector<int>& nums) {int left = 0, right = nums.size() - 1;int x = nums[right];while(left < right){int mid = left + (right - left) / 2;if(nums[mid] > x) left = mid + 1;else right =  mid;}return nums[left];}
};

剑指 offer 53 - II:0~n-1中缺失的数字

一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0~n-1之内。
在范围0~n-1内的n个数字中有且只有一个数字不在该数组中,请找出这个数字。

示例 1:
输入: [0,1,3]
输出: 2

示例 2:
输入: [0,1,2,3,4,5,6,7,9]
输出: 8

限制:
1 <= 数组长度 <= 10000

解法一:哈希表

解法二:直接遍历找结果

解法三:位运算

用^异或运算
比如[0, 1, 2, 4, 5, 6]
[0, 1, 2, 3, 4, 5, 6]
拿正常数组的数和没有缺少的数组通通异或在一起,相同的数会抵消,最后异或的结果就是缺少的数

解法四:高斯求和公式 - 等差数列

算一下没有缺少这批数的和,首项+末项的和/2
然后依次减去数组中的数,最后的数就是缺失的数

上方四组的时间复杂度都是O(N)

更优的解法,解法五:二分查找

[0, 1, 2, | 4, 5, 6]
index:
[0, 1, 2, | 3, 4, 5]

|左边的值一一对应,右边不对应
所以有二段性

要找的结果就是右边区域的最左边的元素的下标

1. 落在左边区间,值和下标对应:nums[mid] = mid -> left = mid + 1
去右边寻找,因为这个区域一定没有结果

2. 落在右边区间:nums[mid] != mid -> right = mid

细节问题:边界情况
如果数组是[0, 1, 2, 3],下标也是一样的
缺失的元素是后面的4,现在根本不存在右边的区间
最终返回的时候要判断一下,当 left==right,所指的值跟下标相等,要返回的是+1

代码:C++

int missingNumber(vector<int>& nums)
{// 解法五,二分查找int left = 0, right = nums.size() - 1;while (left < right){int mid = left + (right - left) / 2;if (nums[mid] == mid) return left = mid + 1;else right = mid;}// 返回结果,处理细节问题return nums[left] == left ? left + 1 : left;}

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

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

相关文章

温度传感器十大品牌

温度传感器品牌排行榜-十大热电偶品牌-热敏电阻品牌排行-Maigoo品牌榜

k8s面试题大全,保姆级的攻略哦(三)

目录 1、简述ETCD及其特点? 2、简述ETCD适应的场景? 3、简述什么是Kubernetes? 4、简述Kubernetes和Docker的关系? 5、简述Kubernetes中什么是Minikube、Kubectl、Kubelet? 6、简述Kubernetes常见的部署方式? 7、简述Kubernetes如何实现集群管理? 8、简述Kubern…

【C++】函数模板和类模版

目录 前言 模板参数 类型模板参数 非类型模板参数 模板的特化 函数模板的特化 类模板的特化 全特化 偏特化 模板的分离编译 模板总结 前言 函数模板和类模板是C模板编程中的两个核心概念&#xff0c;它们允许程序员编写泛型代码&#xff0c;这些代码可以在多种数据…

月薪70-100k,京东招ML算法工程师和运筹优化专家!

Datawhale分享 推荐&#xff1a;黄玉琳&#xff0c;京东&#xff0c;Datawhale成员 团队介绍 我们是京东零售集团供应链算法优化团队&#xff0c;通过在人工智能与运筹优化领域的持续性技术革新,为京东自营千万级商品提供算法策略支持,实现了以用户为中心的供应链管理和更高效…

攻防世界---misc---BotW-

1、下载附件是一张图片 2、查看图片属性&#xff0c;用winhex分析&#xff0c;没有发现奇怪的地方&#xff0c;用binwalk&#xff0c;接着使用foremost 3、得到两张图片&#xff0c;一张是原图&#xff0c;一张是特殊的字符 4、经过查阅资料得知&#xff0c;这是希卡文字&#…

IPv6 归属地城市级 Api 接口 - 精准定位每一个连接

随着互联网的快速发展&#xff0c;人们对于网络安全和隐私保护的要求也越来越高。在网络世界中&#xff0c;每一个连接都有其特定的地理位置&#xff0c;了解连接的归属地信息对于识别恶意行为以及网络运营具有重要意义。IPv6 归属地城市级 Api 接口就能够实现对连接的精准定位…

复数乘法IP核的使用

一、IP核解析 在这张图片中&#xff0c;我们看到的是一个“Complex Multiplier (6.0)” IP 核的配置界面。以下是各个配置参数的详细说明&#xff1a; 1.1 Multiplier Construction Use LUTs: 选择这个选项时&#xff0c;乘法器将使用查找表&#xff08;LUTs&#xff09;来实现…

Understanding Diffusion Objectives as the ELBO with Simple Data Augmentation

Understanding Diffusion Objectives as the ELBO with Simple Data Augmentation 引言 本文前作 VDM 已经推导出了扩散模型可以将优化 ELBO 作为目标函数。然而现在 FID &#xff08;也就是感知质量&#xff09;最好的模型还是用的其他目标函数&#xff08;如 DDPM 的噪声预…

用AI制作历史解说视频:GPT + MidJourney + PiKa + FunSound + 剪映

1. 项目介绍 最近某站看到一个看到利用AI创作视频解说&#xff0c;成品画面很酷炫。对此以初学者视角进行复现&#xff0c;创意来源&#xff1a;用AI制作历史解说视频 2. 开始创作 我们参照原作者展示的内容&#xff0c;对古代人物屈原来生成解说视频。 2.1 故事脚本分镜 【…

FinePrint软件下载及安装教程

【简介】 FinePrint是功能强大的Windows打印机驱动程序&#xff0c;使用旨在帮助用户轻松获得更好的打印效果和功能&#xff0c;并且能够节省你的时间、金钱、纸张和墨水。 FinePrint支持自动双面打印的虚拟打印机工具&#xff0c;使用这款软件可以帮助用户打印双面装订的书籍…

牛客网刷题 | BC120 争夺前五名

目前主要分为三个专栏&#xff0c;后续还会添加&#xff1a; 专栏如下&#xff1a; C语言刷题解析 C语言系列文章 我的成长经历 感谢阅读&#xff01; 初来乍到&#xff0c;如有错误请指出&#xff0c;感谢&#xff01; 描述 期中考试开始了&am…

Springboot整合SpringCache+redis简化缓存开发

使用步骤&#xff1a; 1.引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-cache</artifactId> </dependency><dependency><groupId>org.springframework.boot</groupI…

Zookeeper高频面试题整理(入门到精通)

文章目录 1、什么是Zookeeper&#xff1f;2、ZooKeeper的基本数据结构是什么&#xff1f;3、Zookeeper的节点类型有哪些&#xff1f;4、Zookeeper的特点5、ZooKeeper如何保证数据一致性&#xff1f;6、什么是ZAB协议&#xff1f;7、Zookeeper的ACL机制是什么&#xff1f;8、Zoo…

js map遍历与promise一起使用出现的问题及解决方法

1.async/await 与Promise的关系 async/await是Promise的语法糖 let result await func() // > 等价于 func().then(result > {// code here })async function func () {return 1 } // > 等价与 function func () {return new Promise(resolve > resolve(1)) }2.…

定个小目标之刷LeetCode热题(13)

今天来看看这道题&#xff0c;介绍两种解法 第一种动态规划&#xff0c;代码如下 class Solution {public int maxSubArray(int[] nums) {int pre 0, maxAns nums[0];for (int x : nums) {// 计算当前最大前缀和pre Math.max(pre x, x);// 更新最大前缀和maxAns Math.ma…

ansible.cfg forks参数

在Ansible的配置文件ansible.cfg中&#xff0c;forks参数是一个非常关键的设置&#xff0c;它控制了Ansible执行任务时的并发连接数&#xff0c;直接影响到Ansible执行 playbook 或 ad-hoc 命令时的速度和效率。 意义与作用 并发控制&#xff1a;当你使用Ansible来管理多台主…

【数据结构(邓俊辉)学习笔记】图04——双连通域分解

文章目录 0. 概述1 关节点与双连通域2 蛮力算法3 可行算法4 实现5 示例6 复杂度 0. 概述 学习下双连通域分解&#xff0c;这里略微有一点点难&#xff0c;这个算是DFS算法的非常非常经典的应用&#xff0c;解决的问题也非常非常有用。 1 关节点与双连通域 连通性很好理解&am…

简单记录玩4399游戏flash插件问题

一、因谷歌浏览器默认禁止flash插件自动运行,所以玩家在使用谷歌浏览器,访问www.4399.com平台页面或者4399小游戏(flash资源)时,可能会出现加载异常的情况。今天教大家如何开启flash插件 二、下载falsh官方插件 地址:Flash Player官方下载中心-Flash中国官网 三、如果您…

ctfshow-web入门-命令执行(web30-web36)

目录 1、web30 2、web31 3、web32 4、web33 5、web34 6、web35 7、web36 命令执行&#xff0c;需要严格的过滤 1、web30 代码差不多&#xff0c;就是过滤的东西变多了&#xff1a; preg_match("/flag|system|php/i", $c) 这里不让用 system &#xff0c;我们…

离散数学答疑 4

知识点&#xff1a;什么是可结合&#xff1f; 举例A选项&#xff1a; 知识点&#xff1a;可交换性? 知识点&#xff1a;什么是阿贝尔群&#xff1f; 可交换->运算表中的元素关于主对角线对称 二阶子群的表达式 二阶子群作为一个群的子群&#xff0c;其本质是一个包含单位元…