不动点

简介: 🎈每天进行一道算法题目练习,今天的题目是“不动点”。

说在前面

🎈每天进行一道算法题目练习,今天的题目是“不动点”。

问题描述

给定已经按 升序 排列、由不同整数组成的数组 arr,返回满足 arr[i] == i 的最小索引 i。如果不存在这样的 i,返回 -1。

示例 1:

输入:arr = [-10,-5,0,3,7]
输出:3
解释:对于给定的数组,arr[0] = -10,arr[1] = -5,arr[2] = 0,arr[3] = 3,因此输出为 3 。

示例 2:

输入:arr = [0,2,5,8,17]
输出:0
解释:arr[0] = 0,因此输出为 0 。

示例 3:

输入:arr = [-10,-5,3,4,7,9]
输出:-1
解释:不存在这样的 i 满足 arr[i] = i,因此输出为 -1 。

提示:

1 <= arr.length < 10^4
-10^9 <= arr[i] <= 10^9

思路分析

阅读完题目后,我们可以知道,题目要求是要我们找到不动点,那么什么是不动点呢?题目是这样说的,满足arr[i] == i的最小索引i即是我们要找的不动点。
理解了题目之后,你是不是会觉得这题目就很简单的了,我们可以有以下两种做法。

1、暴力遍历O(n)

我们可以从前往后遍历,遇到第一个arr[i] == i时,此时的i就是题目要求的结果,我们直接return就可以了。

/**
 * @param {number[]} arr
 * @return {number}
 */
var fixedPoint = function(arr) {
    for(let i = 0; i < arr.length; i++) if(arr[i] === i) return i;
    return -1;
};

暴力遍历确实可以找出要求的结果,但是对于此题来说,我们还有更优的解法。

2、二分法O(log(n))

因为题目中说了给出的数组arr是按升序排序的,所以我们可以使用二分法来折半缩小搜索区间。我们只需要维护区间的左右两个端点,当区间中点的数字大于等于中点的下标时,我们需要缩小原来的区间,修改右端点为当前的中点,当区间中点的数字小于中点的下标时,我们也需要缩小原来的区间,修改左端点为当前的中点。

/**
 * @param {number[]} arr
 * @return {number}
 */
var fixedPoint = function(arr) {
    let l=0,r=arr.length-1;
    while(l<r){
        let mid = Math.floor((l+r)/2)
        if(arr[mid]>=mid)
            r=mid
        else
            l=mid+1
    }
    if(arr[l]==l) return l
    else return -1
};

说在后面

🎉这里是 JYeontu,现在是一名前端工程师,有空会刷刷算法题,平时喜欢打打羽毛球🏸 ,平时也喜欢写些东西,既为自己记录📋,也希望可以对大家有那么一丢丢的帮助,写的不好望多多谅解🙇,写错的地方望指出,定会认真改进😊,在此谢谢大家的支持,我们下文再见🙌。
目录
相关文章
|
前端开发 JavaScript
组件库都在使用CSS变量了
SS 变量是一个非常有用的功能,几乎所有浏览器都支持
263 0
|
SQL 算法 搜索推荐
阿里技术号强推:慢SQL治理分享 上
阿里技术号强推:慢SQL治理分享 上
367 0
|
SQL Oracle 关系型数据库
【SQL系列】标量子查询
嵌套在 SELECT 子句中的 SELECT 子句被称为标量子查询,它们只能返回一个值。
294 0
|
Kubernetes Linux 调度
Linux一台服务器可以创建多少个docker容器?底层原理是什么?
Linux一台服务器可以创建多少个docker容器?底层原理是什么?
2034 0
|
SQL 存储 Oracle
Oracle的视图,索引,约束,事务,数据库范式
🍅程序员小王的博客:程序员小王的博客 🍅 欢迎点赞 👍 收藏 ⭐留言 📝 🍅 如有编辑错误联系作者,如果有比较好的文章欢迎分享给我,我会取其精华去其糟粕 🍅java自学的学习路线:java自学的学习路线
88 0
Oracle的视图,索引,约束,事务,数据库范式
|
前端开发 JavaScript API
【微前端】single-spa 到底是个什么鬼(下)
说起微前端框架,很多人第一反应就是 single-spa。但是再问深入一点:它是干嘛的,它有什么用,可能就回答不出来了。 一方面没多少人研究和使用微前端。可能还没来得及用微前端扩展项目,公司就已经倒闭了。 另一方面是中文博客对微前端的研究少之又少,很多文章只是简单翻译一下官方文档,读几个API,放个官方的 Demo 就完事了。很少有深入研究到底 single-spa 是怎么一回事的。这篇文章将不会聊怎么搭建一个 Demo,而是会从 “Why” 和 “How” 的角度来聊一下官方文档的都讲了哪些内容,相信看完这篇文章就能看懂 官方的 Demo 了。
【微前端】single-spa 到底是个什么鬼(下)
|
SQL 安全 Cloud Native
NineData数据管理平台正式上线,开发者必备的数据库产品
11月1日,NineData 多云数据管理平台正式上线,构建全球领先的多云数据管理平台。NineData提供数据备份、复制、对比和企业级SQL开发服务,让您的数据管理更安全更高效。本次发布会演示了如何通过NineData的数据管理平台,实现1分钟配置企业级数据备份。
492 0
NineData数据管理平台正式上线,开发者必备的数据库产品
|
存储 运维 Cloud Native
阿里云李飞飞:什么是云原生数据库
云原生是一种新型技术体系,是云计算未来的发展方向。今天,我来谈谈何为云原生、云原生如何与分布式有机结合,以及云原生技术如何帮助客户迈入数字原生时代。
1909 0
阿里云李飞飞:什么是云原生数据库
|
SQL 安全 Devops
阿里数据库DevOps最佳实践
DevOps已不再陌生,但目前业界主要集中在开发与运维的高效协作和快速发布上,而作为企业核心资产的数据库,其结构设计、SQL审核、变更发布已成为企业效率提升的主要瓶颈,这篇文章将详细介绍阿里在数据库DevOps上遇到的挑战以及解决方案。
7671 1