| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> 7.3日算法刷题笔记 -> 正文阅读 |
|
[数据结构与算法]7.3日算法刷题笔记 |
第一题:
思路: 二分查找在升序数组nums 中寻找目标值 target,对于特定下标 i,比较 nums[i] 和 target 的大小: 如果 nums[i]=target,则下标 i 即为要寻找的下标; 如果nums[i]>target,则 target 只可能在下标 i 的左侧; 如果 [i] < nums[i]<target,则target 只可能在下标 i 的右侧。 基于上述事实,可以在有序数组中使用二分查找寻找目标值。 二分查找的做法是,定义查找的范围 [left,right],初始查找范围是整个数组。每次取查找范围的中点 mid,比较 [mid] 和target 的大小,如果相等则mid 即为要寻找的下标,如果不相等则根据 [mid] 和 target 的大小关系将查找范围缩小一半。 由于每次查找都会将查找范围缩小一半,因此二分查找的时间复杂度是 O(\log n)O(logn),其中 nn 是数组的长度。 二分查找的条件是查找范围不为空,即 left≤right。如果target 在数组中,二分查找可以保证找到 target,返回target 在数组中的下标。如果 target 不在数组中,则当 left>right 时结束查找,返回 ?1。 这是力扣的官方题解,我下面题解都尽量用官方的,以免哪里出错误导你们了,毕竟我对算法这里也是小白,哈哈哈。 第二题
这是我自己的提交界面。 方法一:排序后遍历思路与算法 我们首先按要求对 nums 数组升序排序,随后从左到右遍历数组中的所有元素,并按顺序记录所有数值等于 target 的元素的下标。这样我们可以保证记录的下标数组中的下标(如果存在)必定按照递增顺序排列。 最后,如果符合要求的下标存在,我们返回记录的下标数组作为答案;如果不存在,我们返回空数组即可。
- 方法二:直接统计数量思路与算法 我们也可以不对数组排序来构造目标下标。 在排序后数组中,这些数值等于 target 的元素的下标(如果存在)一定是连续的。因此,我们可以通过寻找目标下标的左边界(即最小值,如果存在,下同)和目标下标的数量来构造目标下标数组。 由于数组是升序排序的,数值等于target 的元素一定在数值小于target 的元素的右侧,因此目标下标的左边界即为数组中数值小于 target 的元素数量。而目标下标的数量即为数组中数值等于 target 的元素数量。 我们遍历未排序的数组,计算数值小于target 的元素数量 cnt1与数值等于 target 的元素数量 cnt2,则此时目标下标即为 [cnt1,cnt1 +cnt 2) 左闭右开区间内的所有整数。我们按照递增的顺序构造对应的下标数组(可能为空)并返回即可。 力扣官方题解 第三题给你一个整数数组 nums 。每次 move 操作将会选择任意一个满足 0 <= i < nums.length 的下标 i,并将 nums[i] 递增 1。
第四题
来源:力扣(LeetCode)
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/25 23:20:01- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |