当前位置: 首页 > news >正文

程序员常用的10种算法

1、二分查找算法(非递归)

1)前面我们讲过二分查找算法,是使用递归方式,下面我们讲解二分查找算法的非递归方式
2)二分查找法只适用于从有序的数列中进行查找(比如数字和字母等),将数列排序后再进行查找
3)二分查找法的运行时间为对数时间O(log2N),即查找到需要的目标位置最多只需要log2N步,假设从[0,99]的队列(100个数,即n=100)中寻找到目标数30,则需要查找步数为log2 100,即最多查找7次。

代码实现

public class BinarySearchNoRecur {public static void main(String[] args) {// 测试int[] arr = {1,3,8,10,11,67,100};int index = binarySearch(arr, 2);System.out.println("index=" + index);}// 二分查找的非递归实现public static int binarySearch(int[] arr, int target) {int left = 0;int right = arr.length -1;while (left <= right) { // 说明继续查找int mid = (left + right) / 2;if(arr[mid] == target) {return mid;} else if(arr[mid] >target) {right = mid - 1;// 需要向左边查找} else {left= mid + 1;// 需要向右边查找}}return -1;}
}

2、分治算法

代码实现

public class Hanoitower {public static void main(String[] args) {hanoiTower(5, 'A','B','C');}// 汉诺塔移动的方法// 使用分治算法public static void hanoiTower(int num, char a, char b, char c) {// 如果只有一个盘子if(num == 1) {System.out.println("第1个盘子从 " + a + "->" + c);} else {// 如果我们有 n>=2 情况,我们总是可以看作是两个盘子,1是最下面的盘子 2上面所有的盘子// 1、先把最上面的所有盘子 A->B, 移动过程中会使用到chanoiTower(num -1, a, c, b);// 2、把最下面的盘 A-> CSystem.out.println("第"+ num + "个盘子从 " + a + "->" + c);// 3、把B塔的所有盘 从B->C,移动过程中使用到a塔hanoiTower(num - 1, b, a, c);}}
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Pandas DataFrame 数据转换处理和多条件查询
  • 【模板】连接外围数据库
  • Java高效写入大量数据到Excel文件——使用Apache POI的SXSSFWorkbook
  • WIFI 频段及信道简介
  • 【摆脱被360安全卫士荼毒:使用这2个软件就够了】
  • GoFly快速开发后台框架当后端接口请求返回403提示码就跨域问题/请求端域名拦截问题
  • [数据集][目标检测]电力场景红外图像输电线路绝缘子检测数据集VOC+YOLO格式1846张1类别
  • 认识泛型VS包装类
  • 第5章 虚拟机的安装和使用
  • MyBatis-Plus 一、(基础应用)
  • ROS2常用指令
  • 探索ISP自动曝光技术:工作原理与应用(一)
  • IEEE802网络协议和标准
  • 固废检测算法实际应用方案固废检测算法源码解析
  • ChatGPT 3.5/4.0 新手使用手册
  • @angular/forms 源码解析之双向绑定
  • Android开发 - 掌握ConstraintLayout(四)创建基本约束
  • eclipse(luna)创建web工程
  • golang中接口赋值与方法集
  • Java 内存分配及垃圾回收机制初探
  • javascript数组去重/查找/插入/删除
  • Vue ES6 Jade Scss Webpack Gulp
  • 编写高质量JavaScript代码之并发
  • 测试开发系类之接口自动化测试
  • 浅谈JavaScript的面向对象和它的封装、继承、多态
  • 入手阿里云新服务器的部署NODE
  • 首页查询功能的一次实现过程
  • 思维导图—你不知道的JavaScript中卷
  • 通过来模仿稀土掘金个人页面的布局来学习使用CoordinatorLayout
  • 一些关于Rust在2019年的思考
  • 用element的upload组件实现多图片上传和压缩
  • 由插件封装引出的一丢丢思考
  • 远离DoS攻击 Windows Server 2016发布DNS政策
  • 在weex里面使用chart图表
  • ​Spring Boot 分片上传文件
  • ​人工智能书单(数学基础篇)
  • # 计算机视觉入门
  • #QT(QCharts绘制曲线)
  • (06)金属布线——为半导体注入生命的连接
  • (20050108)又读《平凡的世界》
  • (Oracle)SQL优化技巧(一):分页查询
  • (ZT)薛涌:谈贫说富
  • (六)什么是Vite——热更新时vite、webpack做了什么
  • (区间dp) (经典例题) 石子合并
  • (实测可用)(3)Git的使用——RT Thread Stdio添加的软件包,github与gitee冲突造成无法上传文件到gitee
  • (四)opengl函数加载和错误处理
  • (贪心 + 双指针) LeetCode 455. 分发饼干
  • .env.development、.env.production、.env.staging
  • .FileZilla的使用和主动模式被动模式介绍
  • .gitignore文件使用
  • .NET C#版本和.NET版本以及VS版本的对应关系
  • .NET Standard、.NET Framework 、.NET Core三者的关系与区别?
  • .NET 漏洞分析 | 某ERP系统存在SQL注入
  • .net 怎么循环得到数组里的值_关于js数组
  • .net操作Excel出错解决