// 1. 实现一个函数,在一个有序整型数组中二分查找出指定的值,找到则返回该值的位置,找不到返回 -1。
package demo;

public class Mytest {
public static void main(String[] args) {
int[] arr={,,,,,};
int index=findIndext(arr,,arr.length-,);
System.out.println("index="+index);
}
// 1. 实现一个函数,在一个有序整型数组中二分查找出指定的值,找到则返回该值的位置,找不到返回 -1。
public static int findIndext(int[] arr,int left,int right,int abc){
if(arr==null||arr.length==){
return -;
}
if(left==right){
if(arr[left]!=abc){
return -;
}
}
int mid=left+(right-left)/;////
if(arr[mid]>abc){//
right=mid-;
return findIndext(arr,left,right,abc);
}else if(arr[mid]<abc){//5<45//9<45/11<45
left=mid+;
return findIndext(arr,left,right,abc);//2,5//3,5//4.5
}else{
return mid;
}
} }
 
/ . 实现一个函数,在一个有序整型数组中二分查找出指定的值,找到则返回该值的位置,找不到返回 -。

// array 升虚数组
public int find(int[] array, int n){
if(array == null){
return -;
} int len = array.length;
if(n < array[] || n > array[len-]){
return -;
} int left = ;
int right = len -;
while(left < right){
int mid = left + (right - left) / ; if(array[mid] == n){
return mid;
}else if(array[mid] < n){
left = mid + ;
}else{
right = mid - ;
}
} if (array[left] == n){
return left;
} else {
return right;
}
} // 2. 写一个函数将一个数组转化为一个链表。
// 要求:不要使用库函数,(如 List 等) public static class Node{
Node next;
int data;
} // 返回链表头
public Node convert(int[] array){
if(array == null || array.length == ){
return null;
} Node head = new Node();
head.data = array[];
int len = array.length; Node end = head;
for(int i=; i< len ; i++){
end = addNode(end, array[i]);
} return head;
} // 给链表尾部添加一个节点
public Node addNode(Node end, int data){
Node node = new Node();
node.data = data;
end.next = node;
return node;
} // 3. 有两个数组,[1,3,4,5,7,9] 和 [2,3,4,5,6,8],用上面的函数生成两个链表 linkA 和
// linkB,再将这两个链表合并成一个链表,结果为[1,2,3,4,5,6,7,8,9].
// 要求:不要生成第三个链表,不要生成新的节点。
// 3.1 使用递归方式实现 //
public Node comb(int[] arrayA, int[] arrayB){
Node linkA = convert(arrayA);
Node linkB = convert(arrayB);
Node head;
if(linkA.data == linkB.data){
head = linkA;
linkA = linkA.next;
linkB = linkB.next;
head.next = null;
}else if (linkA.data < linkB.data){
head = linkA;
linkA = linkA.next;
head.next = null;
}else {
head = linkB;
linkB = linkB.next;
head.next = null;
} Node end = head;
comb(end, headA, headB); return head;
} // 实现递归
public void comb(Node end, Node headA, Node headB){
if(headA == null && headB == null){
return;
}else if(headA == null){
end.next = headB;
return;
}else if(headB == null){
end.next = headA;
return;
} if(headA.data < headB.data){
end.next = headA;
headA = headA.next;
end = end.next;
end.next = null;
comb(end, headA, headB);
}else if(headA.data == headB.data){
end.next = headA;
headA = headA.next;
headB = headB.next;
end = end.next;
end.next = null;
comb(end, headA, headB);
}else {
end.next = headB;
headB = headB.next;
end = end.next;
end.next = null;
comb(end, headA, headB);
}
} // 3.2 使用循环方式实现 // 循环实现
public Node comb(int[] arrayA, int[] arrayB){
// 转换链表
Node linkA = convert(arrayA);
Node linkB = convert(arrayB); // 获取头节点
Node head;
if(linkA.data == linkB.data){
head = linkA;
linkA = linkA.next;
linkB = linkB.next;
head.next = null;
}else if (linkA.data < linkB.data){
head = linkA;
linkA = linkA.next;
head.next = null;
}else {
head = linkB;
linkB = linkB.next;
head.next = null;
} Node end = head;
// 依次将较小的节点加到链表尾部
while(headA != null && headB != null){
if(headA.data < headB.data){
end.next = headA;
headA = headA.next;
end = end.next;
end.next = null; }else if(headA.data == headB.data){
end.next = headA;
headA = headA.next;
headB = headB.next;
end = end.next;
end.next = null; }else {
end.next = headB;
headB = headB.next;
end = end.next;
end.next = null; }
} // 如果其中一个链表为空,将另外一个链表直接添加到合成链表尾部
if(headA == null){
end.next = headB;
}else if(headB == null){
end.next = headA;
} return head;
}

Android 算法 关于递归和二分法的小算法的更多相关文章

  1. 汉诺塔算法的递归与非递归的C以及C++源代码

    汉诺塔(又称河内塔)问题其实是印度的一个古老的传说. 开天辟地的神勃拉玛(和中国的盘古差不多的神吧)在一个庙里留下了三根金刚石的棒,第一根上面套着64个圆的金片,最大的一个在底下,其余一个比一 个小, ...

  2. 熟悉Python的各种基础小算法

    网上有一个Python100小例子的栏目,里面代码良莠不齐,于是下面就自己实现了其中的一些案例. 01.py # coding:utf-8 import sys reload(sys) sys.set ...

  3. PYTHON-匿名函数,递归与二分法,面向过程编程-练习

    # 四 声明式编程练习题 # 1.将names=['egon','alex_sb','wupeiqi','yuanhao']中的名字全部变大写names = ['egon', 'alex_sb', ' ...

  4. PYTHON-匿名函数,递归与二分法,面向过程编程

    """匿名函数1 什么是匿名函数 def定义的是有名函数:特点是可以通过名字重复调用 def func(): #func=函数的内存地址 pass 匿名函数就是没有名字的 ...

  5. python之匿名函数、递归与二分法

    一.匿名函数 什么是匿名函数? 顾名思义就是没有名字的函数,在我们声明一个函数时会想起个什么函数名好,这个问题我想有时候会困惑大家的吧?   def func(): #正常函数声明 pass prin ...

  6. python函数:匿名函数、函数递归与二分法、面向过程编程

    今天主要讲三大部分内容: 一.匿名函数二.函数递归与二分法三.面向过程编程 一.匿名函数: """ 1. 什么时匿名函数 def定义的是有名函数:特点是可以通过名字重复调 ...

  7. 注意Android里TextView控件的一个小坑,用android:theme来设置样式时动态载入的layout会丢失该样式

    注意Android里TextView控件的一个小坑,用android:theme来设置样式时动态载入的layout会丢失该样式 这个坑,必须要注意呀, 比如在用ListView的时候,如果在List_ ...

  8. 怎样在Android实现桌面清理内存简单Widget小控件

    怎样在Android实现桌面清理内存简单Widget小控件 我们常常会看到类似于360.金山手机卫士一类的软件会带一个widget小控件,显示在桌面上,上面会显示现有内存大小,然后会带一个按键功能来一 ...

  9. android上instant app介绍 类似于微信小程序

    android上instant app介绍 类似于微信小程序instant app 是谷歌推出的类似于微信小程序(或者说小程序类似于instant app)的一项技术,用户无须安装应用,用完就走,同时 ...

随机推荐

  1. Windows 7上执行Cake 报错原因是Powershell 版本问题

    在Windows 7 SP1 电脑上执行Cake的的例子 http://cakebuild.net/docs/tutorials/getting-started ,运行./Build.ps1 报下面的 ...

  2. 【开源】分享2011-2015年全国城市历史天气数据库【Sqlite+C#访问程序】

    由于个人研究需要,需要采集天气历史数据,前一篇文章:C#+HtmlAgilityPack+XPath带你采集数据(以采集天气数据为例子),介绍了基本的采集思路和核心代码,经过1个星期的采集,历史数据库 ...

  3. iOS开发之Masonry框架源码深度解析

    Masonry是iOS在控件布局中经常使用的一个轻量级框架,Masonry让NSLayoutConstraint使用起来更为简洁.Masonry简化了NSLayoutConstraint的使用方式,让 ...

  4. zookeeper源码分析之五服务端(集群leader)处理请求流程

    leader的实现类为LeaderZooKeeperServer,它间接继承自标准ZookeeperServer.它规定了请求到达leader时需要经历的路径: PrepRequestProcesso ...

  5. 从Vue.js窥探前端行业

    近年来前端开发趋势 1.旧浏览器逐渐淘汰,移动端需求增加: 旧浏览器主要指的是IE6-IE8,它是不支持ES5特性的:IE9+.chrome.sarafi.firefox对ES5是完全支持的,移动端大 ...

  6. 从c#角度看万能密码SQL注入漏洞

    以前学习渗透时,虽然也玩过万能密码SQL注入漏洞登陆网站后台,但仅仅会用,并不理解其原理. 今天学习c#数据库这一块,正好学到了这方面的知识,才明白原来是怎么回事. 众所周知的万能密码SQL注入漏洞, ...

  7. DOM的小练习,两个表格之间数据的移动

    本次讲的是两个表格之间数据的移动,左边的表格移动到右边,并且左边表格移动内容消失. <head>   <meta http-equiv="Content-Type" ...

  8. Python处理Excel表格

    同事小王今天说他有一个Excel表格,表格如下,一列是姓名,一列是电话号码,总共有大概2000行数据. 有的姓名占了一行,有的占了两行,还有一些占了三行的.如下图: 他问我可不可以全部统一成一行,而且 ...

  9. Xamarin体验:使用C#开发iOS/Android应用

    Xamarin是Mono创始人Miguel de Icaza创建的公司,旨在让开发者可以用C#编写iOS, Android, Mac应用程序,也就是跨平台移动开发.   简介 Xamarin是基于Mo ...

  10. 分布式服务注册和发现consul 简要介绍

    Consul是HashiCorp公司推出的开源工具,用于实现分布式系统的服务发现与配置.与其他分布式服务注册与发现的方案,Consul的方案更"一站式",内置了服务注册与发现框 架 ...