对数器验证小和算法是否正确

题目:在一个数组中,每一个数左边比当前数小的数累加起来,叫做这个数组的小和。求一个数组的小和。

javascript 复制代码
function randomArr(size, value) {
    var length = Math.floor((size + 1) * Math.random())
    var arr = []
    for(var i = 0; i < length; i++) {
        arr[i] = Math.floor((value + 1) * Math.random())
    }
    return arr
}
function sort(arr) {
    if(arr.length < 1) {
        return 0
    }
    return mergeSort(arr, 0, arr.length - 1)
}
function mergeSort(arr, l, r) {
    if(l === r) {
        return 0
    }
    var min = Math.floor((r + l) / 2)
    return mergeSort(arr, l, min) + mergeSort(arr, min + 1, r) + merge(arr, l, r, min)
}
function merge(arr, l, r, min) {
    var p1 = l
    var p2 = min + 1
    var a = []
    var i = 0
    var sum = 0
    while(p1 <= min && p2 <= r) {
        if(arr[p1] - arr[p2] < 0) {
            sum += arr[p1] * (r - p2 + 1)
            a[i] = arr[p1]
            i++
            p1++
        } else {
            a[i] = arr[p2]
            i++
            p2++
        }
    }
    while(p1 <= min) {
        a[i] = arr[p1]
        i++
        p1++
    }
    while(p2 <= r) {
        a[i] = arr[p2]
        i++
        p2++
    }
    arr.splice(l, r - l + 1, ...a)
    return sum
}
function rightWay(arr) {
  if(arr.length < 1) {
      return 0
  }
  var sum = 0
  for(var i = 0; i < arr.length; i++) {
    for(var j = 0; j < i; j++) {
      if(arr[j] < arr[i]) {
        sum += arr[j]
      }
    }
  }
  return sum
}
function logarithm() {
    var time = 50000
    var size = 10
    var value = 100
    for(var i = 0; i < time; i++) {
        var arr1 = randomArr(size, value)
        var arr2 = [...arr1]
        var arr3 = [...arr1]
        
        var sum2 = rightWay(arr2)
        var sum3 = sort(arr3)
        if(sum2 !== sum3) {
          console.log('arr1', arr1)
          console.log('arr2', arr2)
          console.log('arr3', arr3)
          break;
        }
    }
    if(i >= time) {
      console.log('你写的算法是对的')
    }
}
logarithm()
相关推荐
MM_MS3 小时前
Halcon变量控制类型、数据类型转换、字符串格式化、元组操作
开发语言·人工智能·深度学习·算法·目标检测·计算机视觉·视觉检测
独自破碎E3 小时前
【二分法】寻找峰值
算法
mit6.8243 小时前
位运算|拆分贪心
算法
ghie90904 小时前
基于MATLAB的TLBO算法优化实现与改进
开发语言·算法·matlab
恋爱绝缘体14 小时前
2020重学C++重构你的C++知识体系
java·开发语言·c++·算法·junit
wuk9984 小时前
VSC优化算法MATLAB实现
开发语言·算法·matlab
Z1Jxxx4 小时前
加密算法加密算法
开发语言·c++·算法
乌萨奇也要立志学C++4 小时前
【洛谷】递归初阶 三道经典递归算法题(汉诺塔 / 占卜 DIY/FBI 树)详解
数据结构·c++·算法
vyuvyucd5 小时前
C++引用:高效编程的别名利器
算法
鱼跃鹰飞5 小时前
Leetcode1891:割绳子
数据结构·算法