Android 常见算法示例

在Android开发中,有许多常见的算法实现可以用来解决不同的问题。以下是记录的一些常见算法及其在Android中的实现示例:

1. 排序算法

  • 快速排序
public void quickSort(int[] arr, int low, int high) {
    if (low < high) {
        int pi = partition(arr, low, high);
        quickSort(arr, low, pi - 1);
        quickSort(arr, pi + 1, high);
    }
}

private int partition(int[] arr, int low, int high) {
    int pivot = arr[high];
    int i = (low - 1);
    for (int j = low; j < high; j++) {
        if (arr[j] < pivot) {
            i++;
            int temp = arr[i];
            arr[i] = arr[j];
            arr[j] = temp;
        }
    }
    int temp = arr[i + 1];
    arr[i + 1] = arr[high];
    arr[high] = temp;
    return i + 1;
}

2. 搜索算法

  • 二分查找
public int binarySearch(int[] arr, int target) {
    int left = 0, right = arr.length - 1;
    while (left <= right) {
        int mid = left + (right - left) / 2;
        if (arr[mid] == target) {
            return mid;
        }
        if (arr[mid] < target) {
            left = mid + 1;
        } else {
            right = mid - 1;
        }
    }
    return -1; // 未找到
}

3. 图算法

  • 深度优先搜索 (DFS)
public void dfs(int v, boolean[] visited, List<List<Integer>> adj) {
    visited[v] = true;
    System.out.print(v + " ");
    for (int neighbor : adj.get(v)) {
        if (!visited[neighbor]) {
            dfs(neighbor, visited, adj);
        }
    }
}

4. 动态规划

  • 斐波那契数列
public int fibonacci(int n) {
    if (n <= 1) return n;
    int[] fib = new int[n + 1];
    fib[0] = 0;
    fib[1] = 1;
    for (int i = 2; i <= n; i++) {
        fib[i] = fib[i - 1] + fib[i - 2];
    }
    return fib[n];
}

5. 字符串算法

  • KMP字符串匹配算法
public int KMPSearch(String pat, String txt) {
    int M = pat.length();
    int N = txt.length();
    int[] lps = new int[M];
    computeLPSArray(pat, M, lps);
    int i = 0; // txt
    int j = 0; // pat
    while (i < N) {
        if (pat.charAt(j) == txt.charAt(i)) {
            i++;
            j++;
        }
        if (j == M) {
            return i - j; // 找到匹配
            j = lps[j - 1];
        } else if (i < N && pat.charAt(j) != txt.charAt(i)) {
            if (j != 0) {
                j = lps[j - 1];
            } else {
                i++;
            }
        }
    }
    return -1; // 未找到
}

private void computeLPSArray(String pat, int M, int[] lps) {
    int len = 0;
    lps[0] = 0;
    int i = 1;
    while (i < M) {
        if (pat.charAt(i) == pat.charAt(len)) {
            len++;
            lps[i] = len;
            i++;
        } else {
            if (len != 0) {
                len = lps[len - 1];
            } else {
                lps[i] = 0;
                i++;
            }
        }
    }
}

6. 哈希算法

  • 简单的哈希表实现
class HashTable {
    private List<List<Pair>> table;
    private int size;

    public HashTable(int size) {
        this.size = size;
        table = new ArrayList<>(size);
        for (int i = 0; i < size; i++) {
            table.add(new ArrayList<>());
        }
    }

    public void put(String key, String value) {
        int index = key.hashCode() % size;
       
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值