21xrx.com
2024-12-22 19:59:27 Sunday
登录
文章检索 我的文章 写文章
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、面试、算法

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复