经典算法搜集

一 递归算法:

递归算法条件:

1 该问题能够被递归形式描述

2 存在递归结束的边界条件。

优点:化繁为简

缺点:递归是最慢的会发生重复计算,时间复杂度成指数级。

Fibonacci数列:

f(1)=1,f(2)=2,f(n)=f(n-1)+f(n-2)(n>=3)

代码演示:
/**
     * f(1)=1,f(2)=2,f(n)=f(n-1)+f(n-2)(n>=3)
     * <功能详细描述>
     * @return
     * @see [类、类#方法、类#成员]
     */
    public static Long fibonacci(Long num)
    {
        if(1 == num || 2 == num)
        {
            return num;
        }
        else
        {
            return fibonacci(num - 1) + fibonacci(num -2);
        }
    }

2 二分法查找某个元素

前提:数组或集合必须是有序的。

代码如下:

public class BinaryFind {
     public static void main(String[] args) {
        int[] a = new int[100];
        //省去排序的步骤
         for(int i=0; i<a.length; i++) {
            a[i] = i*i;
         }
         int res = 64;//待查找的数
         int pos = search(a,res);
         System.out.println(pos);//返回的实际上是下标
     }
     public static int search(int[] a,int num) {
         if(a.length == 0) {
             return -1;
         }
         int start = 0;
         int end = a.length - 1;
         int mid = (start + end)/2;//和不能溢出
         while(start<end) {
             if(num == a[mid]) {
                 return mid;
             }else if(num>a[mid]) {
                 start = mid +1;
             }else {
                 end = mid -1;
             }
             mid = (start + end)/2;                    
         }
         return -1;
     }
 
 }



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值