Javascript程序 在已排序的二进制数组中计算1

Javascript程序 在已排序的二进制数组中计算1

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

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

在这篇博文中,我们将讨论一个JavaScript程序来计算一个排序的二进制数组中的1的数量。我们还将研究一些边缘案例和优化技术,以使程序更有效率。

问题陈述

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

输入

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

输出

 3

方法1

我想到的第一个方法是遍历数组并计算1的数量。

  • 初始化一个count变量来存储数组中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的实例。

  • 低变量和高变量最初被相应地设置为数组的第一个和最后一个索引。

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

  • 直到低索引大于高值或等于它,while循环将一直运行。每次迭代后,我们确定当前范围的中点。

  • 如果位于中点的元素是1,firstOne变量被更新,高指数被移到较早的元素。如果中间点的元素是0,我们就把低索引移到后面的元素。

  • 一旦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的数量。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

JavaScript 教程