JavaScript 对排序二进制数组中的1进行计数

JavaScript 对排序二进制数组中的1进行计数

我们有两种方法来计算排序二进制数组中的1的数量。第一种方法是遍历数组并计算1的数量。第二种方法是使用二分搜索算法在数组中找到1的第一次出现的位置。

值得注意的是,为了使用这些方法,数组必须是排序的。

在本博文中,我们将讨论一个JavaScript程序,用于计算排序二进制数组中1的数量。我们还会讨论一些边界情况和优化技巧,使程序更加高效。

问题陈述

给定一个排序的二进制数组,任务是计算数组中1的数量。数组可以是任意大小,元素只能是0或1。

输入

bin_array[] = {0, 0, 0,1,1,1}

结果

3

方法1

脑海中首先想到的方法是遍历数组并计算1的个数。

  • 初始化一个计数变量来存储数组中1的个数。

  • 遍历数组并检查每个元素。如果当前元素等于1,则增加计数器。

示例

<html>
<body>
   <p id="result1"></p>
   <p id="result2"></p>
   <script>
      function count_num_of_Ones( bin_array,n) {
         let num_of_ones=0;
         for (let ind = 0; ind < n; ind++) {
            if(bin_array[ind]==1){
               num_of_ones++;
            }
         }
         return num_of_ones;
      }
      let bin_array = [0,0,0,1,1,1];
      let n = bin_array.length;
      document.getElementById("result1").innerHTML = "Original Array: " + JSON.stringify(bin_array);
      document.getElementById("result2").innerHTML = "Count of 1's in given array is " + count_num_of_Ones(bin_array,n)
   </script>
</body>
</html>

然而,这种方法的时间复杂度为O(n),其中n是数组的大小,因为我们遍历了整个数组一次。

通过利用数组已经排序的这一事实,可以进行优化。

方法2

为了找到数组中首个1的实例,可以使用二分搜索的方法。只需将首个1的索引从数组中的总项目数中减去即可得到1的数量。

  • 在此实现中,我们使用“第一次出现”的二分搜索技术来找到数组中首个0的实例。

  • 初始时,low和high变量分别设置为数组的第一个和最后一个索引。

  • 数组中的项目数也被指定为名为firstOne的变量的值,该变量将用于记录数字1的首个实例的索引。

  • 在low索引大于high值或等于high值之前,while循环将继续运行。每次迭代后,我们确定当前范围的中间点。

  • 如果中间点上的元素为1,则更新firstOne变量,并将high索引移动到前一个元素。如果中间点上的元素为0,则将low索引移动到后续元素。

  • 一旦while循环完成,我们检查firstOne变量是否与数组的-1值相对应。如果是,则表示数组中没有1,返回1。如果不是,则返回firstOne减去arr.length。

示例

<html>
<body>
   <p id="result1"></p>
   <p id="result2"></p>
   <script>
      function count_num_of_Ones(bin_arr,low,high) {
         var low = 0;
         var high = bin_arr.length - 1;
         var firstOne = -1;
         while (low <= high) {
            var mid = Math.floor((low + high) / 2);
            if (bin_arr[mid] == 1) {
               firstOne = mid;
               high = mid -1;
            } else {
               low = mid + 1;
            }
         }
         return firstOne == -1 ? 0 : bin_arr.length - firstOne;
      }
      let bin_array = [0,0,0,1,1,1,1];
      let n = bin_array.length;
      document.getElementById("result1").innerHTML = "Original Array: " + JSON.stringify(bin_array);
      document.getElementById("result2").innerHTML = "Count of 1's in given array is " + count_num_of_Ones(bin_array,n)
   </script>
</body>
</html>

这种方法的时间复杂度为O(log n),比之前的方法效率更高。

在本教程中,我们讨论了一个JavaScript程序,用于计算已排序二进制数组中1的个数。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程