java 二分查找

注意

二分查找要求原数组为有序序列,从小到大

递归解法

在这里插入图片描述

public class problem9 {public static void main(String[] args) {int[] arr = {1,2,3,4,6,7};int left = 0;int right = arr.length - 1;int value = 2;System.out.println(Arrays.toString(arr));int index = binary(arr, left, right, value);System.out.println(index);}
//递归解法public static int binary(int[] arr, int left, int right, int value) {if (left > right)
//没有找到就返回-1return -1;
//中间数的下标
/*1.(left+right)/2
* 2.(left + right) >>> 1:无符号右移1,相当于除以2
* */int midIndex=(left + right) >>> 1;
//中间数int middle = arr[midIndex];if (value > middle)
//如果比中间数大,就从中间数的右边进行查找return binary(arr, middle + 1, right, value);else if (value < middle)
//如果比中间数小,就从中间数的左边进行查找return binary(arr, left, middle - 1, value);else
//等于中间数,直接返回下标return midIndex;}
}

非递归解法

public class problem9_1 {public static void main(String[] args) {int[] arr = {1,2,3,4,6,7};int left = 0;int right = arr.length - 1;int value = 2;System.out.println(Arrays.toString(arr));int index = binary(arr, left, right, value);System.out.println(index);}//非递归解法public static int binary(int[] arr, int left, int right, int value) {while (left<=right){int midIndex=(left+right)>>>1;int middle=arr[midIndex];if (value>middle)left=midIndex+1;else if (value<middle)right=midIndex-1;elsereturn midIndex;}return -1;}}

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

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

相关文章

C++for_each| bind1st | ptr_fun | std::function的用法

c for_each 用法_小键233-CSDN博客 传入参数 要传入参数给global function ,需要使用 ptr_fun() 这个 function adapter 将global function 转成function object , 然后再用bind2nd() 将参数bind成一个function object。&#xff08;这句话好拗口&#xff09; void fun(int i…

java三个柱子汉诺塔问题

题目 移动盘子&#xff0c;每一次只能移动一个&#xff0c;小盘子在大盘子上。 打印1 from A to B过程 注意 1&#xff09;盘子编号的变化和辅助柱子的变化 2&#xff09;当盘子编号为1时&#xff0c;结束递归&#xff0c;此时移动结束 代码 package p2;/*** Illustratio…

python遍历txt每一行_python – 计算(和写入)文本文件中每一行的...

第一次在堆栈中发布 – 总是发现以前的问题足以解决我的问题&#xff01;我遇到的主要问题是逻辑……即使是伪代码答案也会很棒. 我正在使用python从文本文件的每一行读取数据,格式如下&#xff1a; This is a tweet captured from the twitter api #hashtag http://url.com/si…

java杨辉三角形

题目 代码1 public class YangHuiTriangle {public static void main(String[] args) {print(10);}public static void print(int num) {int[][] arr new int[num][];for (int i 0; i < num; i) { // 第一行有 1 个元素, 第 n 行有 n 个元素arr[i] new int[i…

python子类继承父类属性实例_python – 从子类内的父类访问属性

在类定义期间,没有任何继承的属性可用&#xff1a; >>> class Super(object): class_attribute None def instance_method(self): pass >>> class Sub(Super): foo class_attribute Traceback (most recent call last): File "", line 1, in cl…

STL源码剖析 算法开篇

STL源码剖析 算法章节 算法总览_CHYabc123456hh的博客-CSDN博客 质变算法 质变算法 - 会改变操作对象的数值&#xff0c;比如互换、替换、填写、删除、排列组合、分隔、随机重排、排序等 #include <iostream> #include <vector>int main(){int ia[] {22,30,20,34…

java 随机数一维数组

题目1 创建一个长度为6的int型数组&#xff0c;要求数组元素的值都在1-30之间&#xff0c;且是随机赋值。同时&#xff0c;要求元素的值各不相同 代码1 public class ArrayTest2 {public static void main(String[] args) {generateArray(6);}public static void generateAr…

STL源码剖析 数值算法 accumulate | adjacent_difference | inner_product | partial_sum | power | itoa

//版本1 template <class InputIterator,class T> T accumulate(InputIterator first,InputIterator last,T init){for(;first ! last; first){init *first; //将每个元素数值累加到init身上}return init; }//版本2 template <class InputIterator,class T,class Bin…

python官网网址是什么意思_大家都是怎么部署python网站的?

flaskgunicornnginx 作者&#xff1a;Python小白 链接&#xff1a;centos下通过gunicorn和nginx部署Flask项目 - Python小白的文章 - 知乎专栏 来源&#xff1a;知乎 著作权归作者所有。商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处。 之前用Flask写了个解析Tu…

java回形数矩阵

题目 从键盘输入一个整数&#xff08;1~20&#xff09; 则以该数字为矩阵的大小&#xff0c;把1,2,3…n*n 的数字按照顺时针螺旋的形式填入其中。例如&#xff1a; 输入数字2&#xff0c;则程序输出&#xff1a; 1 2 4 3 输入数字3&#xff0c;则程序输出&#xff1a; 1 2 3 8…

STL源码剖析 基本算法 equal | fill | iter_awap | lexicographical_compare | max | min | swap |mismatch

Equal 两个序列在[first,last)区间内相等&#xff0c;equal()返回true。以第一个序列作为基准&#xff0c;如果第二序列元素多不予考虑&#xff0c;如果要保证两个序列完全相等需要比较元素的个数 if(vec1.size() vec2.size() && equal(vec1.begin(),vec1.end(),vec2…

svm分类器训练详细步骤_「五分钟机器学习」向量支持机SVM——学霸中的战斗机...

大家好&#xff0c;我是爱讲故事的某某某。 欢迎来到今天的【五分钟机器学习】专栏内容 --《向量支持机SVM》 今天的内容将详细介绍SVM这个算法的训练过程以及他的主要优缺点&#xff0c;还没有看过的小伙伴欢迎去补番&#xff1a;【五分钟机器学习】向量支持机SVM——学霸中的…

java一维数组的复制

题目 使用简单数组(1)创建一个名为ArrayTest的类&#xff0c;在main()方法中声明array1和array2两个变量&#xff0c;他们是int[]类型的数组。(2)使用大括号{}&#xff0c;把array1初始化为8个素数&#xff1a;2,3,5,7,11,13,17,19。(3)显示array1的内容。(4)赋值array2变量等…

STL源码剖析 数值算法 copy 算法

copy复制操作&#xff0c;其操作通过使用assignment operator 。针对使用trivial assignment operator的元素型别可以直接使用内存直接复制行为(使用C函数 memove或者memcpy)节约时间。还可以通过函数重载(function overloading)、型别特性(type traits)、偏特化(partial speci…

python输入数字成数组_python – Numpy:将数值插入数组的最快方法,使得数组按顺序排列...

假设我有一个数组my_array和一个奇异值my_val. (请注意,my_array始终排序). my_array np.array([1, 2, 3, 4, 5]) my_val 1.5 因为my_val是1.5,我想把它放在1和2之间,给我数组[1,1.5,2,3,4,5]. 我的问题是&#xff1a;当my_array任意增大时,生成有序输出数组的最快方式(即以微…

java 一维数组的反转

代码 public class ReverseArray {public static void main(String[] args) {String[] str {"AA", "BB", "CC", "DD"};System.out.println(Arrays.toString(str));reverse1(str);System.out.println(Arrays.toString(str));reverse2…

STL源码剖析 数值算法 copy_backward 算法

copy_backward 时间技巧和copy类似主要是将[first&#xff0c;last)区间范围内的元素按照逆行方向复制到以result-1为起点&#xff0c;方向同样是逆行的区间上返回的迭代器的类型是result - (last - first)copy_backward支持的类型必须是BidirectionalIterators &#xff0c;才…

java线性查找和二分查找

线性查找 package lesson.l7_array;/*** Illustration** author DengQing* version 1.0* datetime 2022/6/23 14:19* function 线性查找*/ public class LineSearch {public static void main(String[] args) {String[]str{"AA","BB","CC"};boo…

python开发web项目_Django2:Web项目开发入门笔记(20)

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 这一篇教程&#xff0c;我们一起来了解如何在CentOS系统中将Django2的Web项目部署到Nginx服务器。 CentOS系统虽然和Ubuntu系统都是Linux系统&#xff0c;但是环境搭建和部署过程还是有一些区别。 整个流程分为几个部分&#xff1…

STL源码剖析 Set相关算法 并集 set_union|交集 set_intersection|差集 set_difference |对称差集 set_symmetric_difference

注意事项 四种相关算法&#xff1a;并集、交集、差集、对称差集本章的四个算法要求元素不可以重复并且经过了排序底层接受STL的set/multiset容器作为输入空间不接受底层为hash_set和hash_multiset两种容器 并集 set_union s1 U s2考虑到s1 和 s2中每个元素都不唯一&#xff0…