1. 程式人生 > 其它 >【LeetCode】306. Additive Number 累加數(Medium)(JAVA)

【LeetCode】306. Additive Number 累加數(Medium)(JAVA)

技術標籤:資料結構於演算法設計java資料結構演算法

提示:文章寫完後,目錄可以自動生成,如何生成可參考右邊的幫助文件

文章目錄


1 二分排序的思路和注意要點

在這裡插入圖片描述

二分查詢的思路分析

  1. 首先確定該陣列的中間的下標
    mid = (left + right) / 2
  2. 然後讓需要查詢的數 findVal 和 arr[mid] 比較
    2.1 findVal > arr[mid] , 說明你要查詢的數在mid 的右邊, 因此需要遞迴的向右查詢
    2.2 findVal < arr[mid], 說明你要查詢的數在mid 的左邊, 因此需要遞迴的向左查詢
    2.3 findVal == arr[mid] 說明找到,就返回-1

什麼時候我們需要結束遞迴.

  1. 找到就結束遞迴
  2. 遞迴完整個陣列,仍然沒有找到findVal ,也需要結束遞迴 當 left > right 就需要退出

2 二分排序的java實現

import java.util.ArrayList;
import java.util.List;

//注意:使用二分查詢的前提是 該陣列是有序的.
public class BinarySearch {

	public static void main(String[] args) {
		int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 , 11, 12, 13,14,15,16,17,18,19,20 }
; int index = binarySearch(arr, 0, arr.length - 1, 1); System.out.println("查詢元素的位置是:"+index); } public static int binarySearch(int[] arr, int left, int right, int findVal) { // 當 left > right 時,說明遞迴整個陣列,但是沒有找到 if (left > right) { return -1; } int mid = (left + right)
/ 2; int midVal = arr[mid]; if (findVal > midVal) { // 向 右遞迴 return binarySearch(arr, mid + 1, right, findVal); } else if (findVal < midVal) { // 向左遞迴 return binarySearch(arr, left, mid - 1, findVal); } else { return mid; } } }

總結

注意這是在有序陣列下查詢元素