21xrx.com
2025-06-28 13:00:11 Saturday
文章检索 我的文章 写文章
Java面试常见算法:从基础到高级
2023-06-15 18:08:06 深夜i     --     --
Java 面试 算法

在Java面试过程中,算法是不可避免的一个话题。不同级别的面试官会对不同难度层次的算法问题进行提问,因此,对常见算法的掌握是必要的。本文将介绍Java面试中常见的算法,从基础到高级逐一讲解,并提供相应的代码案例,希望对大家有所帮助。

一、基础算法

1.排序算法

排序算法是最常见的基础算法之一,常见的有冒泡排序、选择排序、插入排序、快速排序、归并排序等。以下是冒泡排序的Java代码案例:

public static void bubbleSort(int[] arr) {
  int len = arr.length;
  for (int i = 0; i < len - 1; i++) {
    for (int j = 0; j < len - 1 - i; j++) {
      if (arr[j] > arr[j + 1]) {
        int temp = arr[j];
        arr[j] = arr[j + 1];
        arr[j + 1] = temp;
      }
    }
  }
}

2.查找算法

查找算法可以分为线性查找和二分查找。当然,对于有序数组,二分查找是更好的选择。以下是二分查找的Java代码案例:

public static int binarySearch(int[] arr, int target) {
  int left = 0;
  int 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;
}

二、高级算法

1.动态规划算法

动态规划算法是一种解决最优化问题的方法,其核心思想是将原问题分解为子问题并缓存子问题的结果,避免重复计算。以下是斐波那契数列的Java代码案例:

public static int fib(int n) {
  if (n == 0)
    return 0;
  
  int[] dp = new int[n + 1];
  dp[0] = 0;
  dp[1] = 1;
  for (int i = 2; i <= n; i++) {
    dp[i] = dp[i - 1] + dp[i - 2];
  }
  return dp[n];
}

2.分治算法

分治算法是将原问题分解为若干个子问题并分别解决,最后将所有子问题答案合并起来得到原问题的答案。以下是快速排序的Java代码案例:

public static void quickSort(int[] arr, int left, int right) {
  if (left >= right)
    return;
  
  int pivot = partition(arr, left, right);
  quickSort(arr, left, pivot - 1);
  quickSort(arr, pivot + 1, right);
}
public static int partition(int[] arr, int left, int right) {
  int pivot = arr[right];
  int i = left;
  for (int j = left; j < right; j++) {
    if (arr[j] < pivot) {
      int temp = arr[i];
      arr[i] = arr[j];
      arr[j] = temp;
      i++;
    }
  }
  int temp = arr[i];
  arr[i] = pivot;
  arr[right] = temp;
  return i;
}

三、关键词

Java、面试、算法

  
  

评论区