数据结构与算法分析(原书第3版)--- 算法分析

数据结构与算法分析(原书第3版)— 算法分析

1、最大子序列和问题求解

       给定整数 A 1 , A 2 , A 3 , 。 。 。 , A N , A_1,A_2,A_3,。。。,A_N, A1A2A3AN求解 ∑ k = i j A k \sum_{k=i}^j A_k k=ijAk的最大值。

       例如:对于输入-2,11,4,13,-5,-2,答案为20(从 A 2 A_2 A2 A 4 A_4 A4

求解:

    public static int maxSubSum(int[] a) {
        int maxSum = 0, thisSum = 0;
        for (int i = 0; i < a.length; i++) {
            thisSum += a[i];
            if (thisSum > maxSum) {
                maxSum = thisSum;
            } else if (thisSum < 0) {
                thisSum = 0;
            }
        }
        return maxSum;
    }

2、折半查找

       给定一个整数 X X X和整数 A 0 , A 1 , 。 。 。 , A N − 1 , A_0,A_1,。。。,A_{N-1}, A0A1AN1后者已经预先排序并在内存中 , , 求下标 i i i使得 A i = X , A_i=X, Ai=X如果 X X X不再数据中 , , 则返回 i = − 1 。 i=-1。 i=1

求解:

	private static final int NOT_FOUND = -1;

    public static <AnyType extends Comparable<? super AnyType>> 
    int binarySearCh(AnyType[] a, AnyType x) {
        int low = 0, high = a.length - 1;
        while (low <= high) {
            int mid = (low + high) / 2;
            if (a[mid].compareTo(x) < 0) {
                low = mid + 1;
            } else if (a[mid].compareTo(x) > 0) {
                high = mid - 1;
            } else {
                return mid;
            }

        }
        return NOT_FOUND;
    }

3、欧几里得算法

计算最大公因数的欧几里得算法

    public static long gcd(long m, long n) {
        while (n != 0) {
            long rem = m % n;
            m = n;
            n = rem;
        }
        return m;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值