斐波那契查找+思路分析

图解

在这里插入图片描述

代码实现

package com.atguigu.search;import java.util.Arrays;/*** @创建人 wdl* @创建时间 2021/3/23* @描述*/
public class FibonacciSearch {public static int maxSize = 20;public static void main(String[] args) {int[] arr = {1, 8, 10, 89, 1000, 1234};System.out.println(fibSearch(arr,44));}//因为后面我们mid=low+F(k+1)-1,需要使用到斐波那契数列,因此我们需要先获取到一个斐波那契数列//非递归方法得到一个斐波那契数列public static int[] fib() {int[] f = new int[maxSize];f[0] = 1;f[1] = 1;for (int i = 2; i < maxSize; i++) {f[i] = f[i - 1] + f[i - 2];}return f;}/*** @param a   数组* @param key 我们需要查找的关键码(值)* @return 返回对应的下标,如果没有-1*///编写斐波那契查找算法//使用非递归的方法编写算法public static int fibSearch(int[] a, int key) {int low = 0;int high = a.length - 1;int k = 0;//表示斐波那契分割数值的下标int mid = 0;//存放mid值int f[] = fib();//获取到斐波那契数列//获取到斐波那契分割数的下标while (high > f[k] - 1) {k++;}//因为f[k]可能大于数组的长度,因此我们需要使用Arrays类,构造一个新的数组,并指向a[]//不足的部分会使用0填充int[] temp = Arrays.copyOf(a, f[k]);//实际上需要使用a数组最后的数进行填充tempfor (int i = high + 1; i < temp.length; i++) {temp[i] = a[high];}//使用while来循环处理,找到我们的数keywhile (low <= high) {//只要这个条件满足,就可以找mid = low + f[k - 1] - 1;if (key < temp[mid]) {//说明我们应该继续向数组的前面查找(左边)high = mid - 1;//为什么是k--//说明//1.全部元素=前面的元素+后边元素//2.f[k]=f[k-1]+f[k-2]//因为前面有f[k-1]个元素,所以可以继续拆分f[k-1]=f[k-2]+f[k-3]//即在f[k-1]的前面继续查找k--//即下次循环mid=f[k-1-1]-1k--;} else if (key > temp[mid]) {说明我们应该继续向数组的前面查找(右边)low = mid + 1;//为什么是k-=2//说明//1.全部元素=前面的元素+后边元素//2.f[k]=f[k-1]+f[k-2]//因为后面有f[k-2]个元素,所以可以继续拆分f[k-2]=f[k-3]+f[k-4]//即在f[k-2]的后面继续查找k-=2//即下次循环mid=f[k-1-2]-1k-=2;}else {//找到//需要确定,返回的是哪个下标if(mid<=high){return mid;}else {return high;}}}return -1;//没有找到}}

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

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

相关文章

OSS.Social微信项目标准库介绍

经过本周的努力&#xff0c;昨晚终于完成OSS.Social微信项目的标准库支持&#xff0c;当前项目你已经可以同时在.net framework和.net core 中进行调用&#xff0c;调用方法也发生了部分变化&#xff0c;这里我简单分享下&#xff0c;主要包含下边几个部分&#xff1a; 移植后…

ssh(Spring+Spring mvc+hibernate)简单增删改查案例

最近和spring mvc干上了&#xff0c;各种奇葩问题&#xff0c;各种解决。。。现在想想这历程还挺艰辛的&#xff0c;好了&#xff0c;不在这墨迹了&#xff0c;我们进入正题。 据说&#xff0c;现在Springmvc很流行&#xff0c;既然很流行就搞搞它&#xff0c;看看是个什么鬼&…

按小区楼栋单元楼层房间号进行排序-多列字符串提取数字进行排序

多列字符串提取数字进行排序 order by e.community_code, e.estate_id, cast(cour.court_name as UNSIGNED) , cast(b.build_name as UNSIGNED) , cast(u.unit_name as UNSIGNED) ,cast(f.floor_name as UNSIGNED) , cast(a.house_no as UNSIGNED) <select id"ge…

Visual Studio 2017 离线安装方式

Visual Studio&#xff0c; 特别是Visual Studio 2017 通常是一个在线安装程序&#xff0c;如果你在安装过程中失去连接&#xff0c;你可以遇到问题。但是&#xff0c;由于法律原因&#xff0c;微软没有提供完整的可下载的ISO镜像。他们不能将Android安装程序从Google打包到ISO…

如何用xshell上宝塔

如何下载xshell7免费版 网盘链接 提取码tmtn 如何连接服务器 第一步 第二步 第三步 第四步 第五步 安装宝塔 直接输入命令 yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh得到 打开浏览…

Essential MSBuild: .NET 工具生成引擎概述

过去几年大家一直都在使用 .NET Core&#xff08;有这么久吗&#xff1f;&#xff09;并且都知道“生成系统”经历了重大改变&#xff0c;不论是终止对 Gulp 的内置支持&#xff0c;还是放弃 Project.json。对于我这个专栏作家来说&#xff0c;这些变化一直很棘手&#xff0c;因…

单片机中存储器扩展位地址线怎么算_51单片机存储器小结

存储器分为程序存储器(ROM)和数据存储器(RAM)&#xff0c;两种又都可以分为片内和片外&#xff0c;片外即需要自己在单片机外部扩展。8051单片机的片内程序存储器有4K&#xff0c;片内数据存储器有256个字节&#xff0c;其中又分为高128字节位特殊功能寄存器区&#xff0c;真正…

[Java]对double变量进行四舍五入,并保留小数点后位数

[Java]对double变量进行四舍五入&#xff0c;并保留小数点后位数 - 雾霾王者 - 博客园 [Java]对double变量进行四舍五入&#xff0c;并保留小数点后位数 1.功能 将double类型变量进行四舍五入&#xff0c;并保留小数点后位数 2.代码 import java.math.BigDecimal; import ja…

尊贵豪礼:微软2017最有价值专家MVP奖套件开箱图集

IT之家编者按&#xff1a;台湾省某科技网站站长获得了微软2017年度最有价值专家&#xff08;Most Valuable Professional&#xff0c;MVP&#xff09;奖&#xff0c;得奖的领域则是 Windows and Devices for IT。这位站长于是就展示了这份MVP的礼包开箱&#xff0c;从照片上看&…

echart vue 图表大小_vue之将echart封装为组件

最近的新项目里&#xff0c;有大量数据图表类的需求&#xff0c;为了增强代码的复用性&#xff0c;减少冗余&#xff0c;我开始思考如何将echart封装为组件调用。本文将会以雷达图为案例&#xff0c;一步步讲解在vue项目中如何使用echart&#xff0c;如何将其封装为能重复调用的…

个性化配置你的SQL Server on Linux

问题引入 这天老鸟满面春风找到菜鸟&#xff1a;“鸟儿啊&#xff0c;看你最近研究SQL Server On Linux如鱼得水&#xff0c;干得不错啊。不过呢&#xff0c;这是一个张扬个性的年代&#xff0c;要创新&#xff0c;要与众不同&#xff0c;那你怎么在Linux平台对SQL Server做个性…

idea查看读取的那个nacos配置和yaml配置 naocos 日志

logging.level.com.alibaba.cloud.nacos.client.NacosPropertySourceBuilderdebug

二叉树的前中后序查找+思路分析

思路分析 代码实现 package com.atguigu.tree;/*** 创建人 wdl* 创建时间 2021/3/24* 描述*/ public class BinaryTreeDemo {public static void main(String[] args) {//先需要创建一颗二叉树BinaryTree binaryTree new BinaryTree();//创建需要的节点HeroNode root new He…

spark sql uv_使用Spark Streaming SQL进行PV/UV统计

作者&#xff1a;关文选&#xff0c;花名云魄&#xff0c;阿里云E-MapReduce 高级开发工程师&#xff0c;专注于流式计算&#xff0c;Spark Contributor1.背景介绍PV/UV统计是流式分析一个常见的场景。通过PV可以对访问的网站做流量或热点分析&#xff0c;例如广告主可以通过PV…

二叉树删除节点+思路分析

思路分析 代码实现 ![在这里插入代码片](https://img-blog.csdnimg.cn/20210325193201194.png?x-oss-processimage/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ1NzgzNjYw,size_16,color_FFFFFF,t_70)

ddm模型公式_简单判断目前行情——从股利贴现模型切入

本文目录&#xff1a;1.介绍股利贴现模型&#xff1b;2.以贵州茅台为例根据现有情况估计模型内部各参数&#xff1b;3.得出结论&#xff1b;一、股利贴现模型&#xff08;DDM&#xff09;我们知道给一项资产定价最朴素的想法是将它未来产生的所有现金流以一定的贴现率贴现至当前…

分布式事务与一致性算法Paxos amp; raft amp; zab

1.CAP原理 要想数据高可用&#xff0c;就得写多份数据写多分数据就会导致数据一致性问题数据一致性问题会引起性能问题 2.一致性模型 弱一致性最终一致性&#xff08;一段时间达到一致性&#xff09;强一致 1、2 异步冗余&#xff1b;3是同步冗余 3. 扩展服务的方案 数据分区&…

打开数据库_数据库客户端navicat遇到问题怎么办?

前面的文章介绍了&#xff1a;mysql数据库如何安装&#xff0c;客户端navicat如何安装。下面是客户端navicat使用过程中常见问题的解决办法。【问】使用navicat连接数据库报错信息&#xff1a;12511251Client does not support authentication protocol requested by server,co…

遍历线索化二叉树+图解

图解 代码实现 package com.atguigu.tree.threadedbinarytree;/*** 创建人 wdl* 创建时间 2021/3/25* 描述*/ public class ThreadedBinaryTreeDemo {public static void main(String[] args) {//测试一把中序线索化二叉树的功能HeroNode root new HeroNode(1, "tom&quo…

JS实现星星评分功能实例代码(两种方法)

转载自 JS实现星星评分功能实例代码(两种方法) 一、方法1 1、用到图片 2、结构和样式 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Document</title><style>ul {padding-left: 0;…