在排序数组中寻找上界的JavaScript程序

在排序数组中寻找上界的JavaScript程序

数组是一种线性数据结构,包含对象,并且在排序数组中,元素按增加的顺序存储。我们已经有了一个排序数组和一个整数x。我们要从给定的数组中打印整数x的上界。排序数组中x的上界是大于或等于x的最小元素,而下界是小于或等于x的最大成员。如果x的上界不存在于数组中,我们必须打印“x的上界不存在于数组中。”

假设我们有一个排序数组和一个整数x,如下所示:

输入

Array = [1, 3, 5, 7, 9]
X = 19

输出

19的上界不存在于数组中

说明

19或大于19有0个值存在于数组中,这就是为什么19的上界不存在,所以输出是9的上界不存在于数组中。

输入

Array: [1, 3, 5, 7, 9]
X = 2

输出

3

解释:因为我们知道x的上界是大于或等于x的最小元素,所以这里x是2,在数组中2不出现,并且大于2的唯一元素是3,因此输出是3。

解法

这里我们将讨论两个解法。请参阅下面的部分-

解法 1:通过线性搜索在排序数组中找到上界

这种方法的想法是,我们将查找与给定数字x相等或大于给定数字x的元素,通过从数组的开头遍历数组到所需位置或数组结尾来实现。

例子

// 实现线性搜索的函数
function findCeiling(arr, x){   
   var len = arr.length // 获取数组的长度 

   // 遍历给定的数组
   for(var i =0; i<len; i++){

      // 如果当前数字等于当前数字或大于给定数字,则返回它
      if(x <= arr[i]){
         return i;
      }
   }

   // 由于我们已经遍历了整个数组,因此没有元素比给定元素小
   return -1;
}

// 定义数组
var arr = [1, 2, 4, 5, 8, 19, 25]
var num = 15
console.log("给定的数组是:");
console.log(arr);

// 调用函数
var idx = findCeiling(arr,num);
if(idx == -1){
   console.log("给定数字 " + num + " 的上界不存在");
}
else{
   console.log("给定数字 " + num + " 在数组中的上界是 " + arr[idx]);
}
num = 78
idx = findCeiling(arr,num);
if(idx == -1){
   console.log("给定数字 " + num + " 的上界不存在");
}
else{
   console.log("给定数字 " + num + " 在数组中的上界是 " + arr[idx]);
}

时间复杂度:O(N),其中N是数组的大小。

空间复杂度:O(1),因为我们没有使用任何额外的空间。

解法 2:通过二分搜索在排序数组中找到上界

这种方法的想法是我们要遍历数组但不是整个数组。因为我们知道我们有一个排序数组,所以在这里我们应用二分搜索,将数组从中间分成两部分,并检查是否

例子

// 实现线性搜索的函数 
function findCeiling(arr, l, h, x){

   //定义结束条件
   if(x <= arr[l]){
      return l;
   }
   else if(x > arr[h]){
      return -1;
   }    
   var mid = (l + h)/2;   

   //如果当前元素和x相同,返回当前索引 
   if(arr[mid] == x){
      return mid;
   }
   else if(arr[mid] < x){        
      if(mid + 1 <= h && x <= arr[mid + 1]){
         return mid +1;
      }
      else{
         return findCeiling(arr, mid+1, h, x);
      }
   }
   else{
      if(mid - 1 >= l && x > arr[mid - 1]){
         return mid;
      }
      else{
         return findCeiling(arr,l, mid-1, x);
      }
   }
}

//定义数组 
var arr = [1, 2, 4, 5, 8, 19, 25]
var num = 15
console.log("给定的数组是: ");
console.log(arr);

//调用函数 
var idx = findCeiling(arr,0, arr.length-1, num);
if(idx == -1){
   console.log("给定数字" + num + "的上限不存在");
}
else{
   console.log("给定数字" + num + "在数组中的上限是" + arr[idx]);
}
num = 78
idx = findCeiling(arr, 0, arr.length-1, num);
if(idx == -1){
   console.log("给定数字" + num + "的上限不存在");
}
else{
   console.log("给定数字" + num + "在数组中的上限是" + arr[idx]);
}

时间复杂度: O(log(N)),其中N是数组的长度。

空间复杂度: O(log(N)),因为我们使用了额外的空间。

结论

本教程中,我们实现了一个JavaScript程序,用于在给定的排序数组中找到给定数字的上限。给定数字的上限是指在给定数组中存在并且等于给定数字的数字,如果没有,则只是大于给定数字。如果给定数组中没有任何一个元素比给定数字更大,则不存在。我们实现了线性搜索和二分搜索算法。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

JavaScript 教程