Java 使用二分查找法找到一个数的立方根

Java 使用二分查找法找到一个数的立方根

立方根 当一个数与自身相乘三次时,得到原始数的整数值。在本文章中,我们将编写一个使用二分查找法找到一个数的立方根的Java程序。找到一个数的立方根是二分查找算法的一个应用之一。在本文中,我们将详细讨论如何使用二分查找法计算立方根。

输入输出示例

Example-1: 
Input: 64 
Output: 4

由于64的立方根是4,输出结果为4。

Example-2: 
Input: 216
Output: 6

由于216的立方根是6,输出为6。

二分查找

二分查找是一种用于在有序数组中查找元素(即键)的算法。二分算法的工作原理如下:

  • 假设数组为’arr’。将数组按升序或降序排序。

  • 初始化low = 0和high = n-1(n为元素个数),计算middle = low + (high-low)/2。如果arr[middle] key,则返回中间索引即middle。

  • 否则,如果key值小于arr[middle]元素,则将high索引设置为middle索引-1;如果key值大于middle元素,则将low索引设置为middle索引+1。

  • 继续进行二分查找,直到找到需要查找的元素。

  • 如果low大于high,则直接返回false,因为键不在数组’arr’中。

使用二分查找查找键的示例

问题

给定一个已排序的整数数组arr = [1, 3, 5, 7, 9, 11],使用二分查找找到元素即key = 7的索引。

解决方案

  • 初始化low = 0和high = 5(数组的最后一个索引)。

  • while循环的第一次迭代给出中间索引mid = low + (high-low)/2。

  • mid = 0+(5-0)/2 = 2。

  • arr[mid]的值为5,小于key值7。因此,我们更新low = mid + 1 = 3。

  • while循环的第二次迭代通过使用low + (high-low)/2来得到中间索引mid = 4。

  • arr[mid]的值为9,大于key值7。因此,我们更新high = 3(mid – 1)。

  • while循环的第三次迭代给出中间索引mid = 3。

  • arr[mid]是7,等于key值。因此,我们返回中间索引3。

  • 因此,给定数组中键7的索引为3,这是使用二分查找算法找到的。

使用二分查找找到立方根的算法

步骤1: 考虑一个数字’n’,并初始化low = 0和 high = n(给定的数字)。

步骤2: 使用mid = low + (high-low)/2找到low和high的中间值。

步骤3 − 找到 mid * mid * mid 的值,如果 mid * mid * mid n,则返回 mid 的值。

步骤4 − 如果 mid 的值小于 n,则将 low=mid+1,否则将 high=mid-1

步骤5 − 重复步骤2到4直到找到所需的值。

示例

在此示例中,我们使用二分查找算法找到一个值的立方根。我们创建了一个自定义类 ‘BinarySearchCbrt’,并在 ‘cuberoot’ 函数中实现了用于查找一个数字的立方根的二分查找代码。现在,创建自定义类对象并用一个整数数字初始化一个名为 ‘number’ 的变量,使用该类对象调用 ‘cuberoot’ 函数,从而显示所需的输出。

//Java Program to find Cube root of a number using Binary Search
import java.util.*;
class BinarySearchCbrt {
   public  int cuberoot(int number) {
      int low = 0;
      int high = number;
      while (low <= high) {
         int mid = (low + high) / 2;
         int cube = mid * mid*mid;
         if (cube == number) {
            return mid;
         } else if (cube < number) {
            low = mid + 1;
         } else {
            high = mid - 1;
         }
      }
      return 0;
   }
}
public class Main {
   public static void main(String[] args) {
      int n = 64;
      BinarySearchCbrt Obj  = new  BinarySearchCbrt();
      int result= Obj.cuberoot(n);
      System.out.println("Cube root of " + n + " = " + result);
   }
}

输出

Cube root of 64 = 4

时间复杂度:O(NlogN) 辅助空间:O(1)

因此,在本文中我们讨论了如何使用二分查找算法在Java中找出一个数的立方根。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程