// 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. ASP.NET Core的路由[5]:内联路由约束的检验

    当某个请求能够被成功路由的前提是它满足某个Route对象设置的路由规则,具体来说,当前请求的URL不仅需要满足路由模板体现的路径模式,请求还需要满足Route对象的所有约束.路由系统采用IRouteC ...

  2. TypeScript为Zepto编写LazyLoad插件

    平时项目中使用的全部是jQuery框架,但是对于做webapp来说jQuery太过于庞大,当然你可以选择jQuery 2.*针对移动端的版本. 这里我采用移动端使用率比较多的zepto框架,他跟jqu ...

  3. Lambda

    Lambda Lambda 表达式是一种可用于创建委托或表达式目录树类型的匿名函数. 通过使用 lambda 表达式,可作为参数传递或作为函数调用值返回的本地函数. Lambda 表达式对于编写 LI ...

  4. 非关系型数据库(NoSql)

    最近了解了一点非关系型数据库,刚刚接触,觉得这是一个很好的方向,对于大数据 方面的处理,非关系型数据库能起到至关重要的地位.这里我主要是整理了一些前辈的经验,仅供参考. 关系型数据库的特点 1.关系型 ...

  5. 【NLP】干货!Python NLTK结合stanford NLP工具包进行文本处理

    干货!详述Python NLTK下如何使用stanford NLP工具包 作者:白宁超 2016年11月6日19:28:43 摘要:NLTK是由宾夕法尼亚大学计算机和信息科学使用python语言实现的 ...

  6. 【详细教程】论android studio中如何申请百度地图新版Key中SHA1值

    一.写在前面 现在越来越多的API接口要求都要求提供我们的项目SHA1值,开发版目前还要求不高,但是发布版是必定要求的.而目前定位在各大APP中也较为常见,当下主流的百度地图和高德地图都在申请的时候会 ...

  7. Linux实战教学笔记03:操作系统发展历程及系统版本选择

    标签(空格分隔): Linux实战教学笔记-陈思齐 第1章 Linux简介 1.1 什么是操作系统? 简单讲:操作系统就是一个人与计算机硬件的中介. 操作系统,英文名称Operating System ...

  8. 一不小心写了个WEB服务器

    开场 Web服务器是啥玩意? 是那个托管了我的网站的机器么? No,虽然那个也是服务器,但是我们今天要说的Web服务器主要是指像IIS这样一类的,用于处理request并返回response的工具,没 ...

  9. 如何设计一门语言(七)——闭包、lambda和interface

    人们都很喜欢讨论闭包这个概念.其实这个概念对于写代码来讲一点用都没有,写代码只需要掌握好lambda表达式和class+interface的语义就行了.基本上只有在写编译器和虚拟机的时候才需要管什么是 ...

  10. 如何选择靠谱的app外包公司,2017最新资讯

    企业在外包开发app之前最纠结的问题就是如何选择一个靠谱的app外包公司.因为一个靠谱的app外包公司非常重要,完全决定了app外包开发的周期.bug.售后服务等各方面问题,可以说app开发外包团队一 ...