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

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

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()
相关推荐
JieE2121 天前
LeetCode 101. 对称二叉树|JS 递归 + 迭代双解法,彻底搞懂镜像判断
javascript·算法
JieE2122 天前
LeetCode 56. 合并区间|超清晰 JS 图解思路,面试高频区间题
javascript·算法·面试
Jack202 天前
HarmonyOS开发中错误处理策略:网络异常统一处理
算法
小小杨树3 天前
读懂色彩:拍照调色不再难
算法·计算机视觉·配色
JieE2123 天前
LeetCode 226. 翻转二叉树|JS 递归超详细拆解,二叉树入门经典题
javascript·算法
JieE2123 天前
LeetCode 104. 二叉树的最大深度|递归思路超详细拆解
javascript·算法
vivo互联网技术3 天前
CVPR 2026 | 全新强化学习框架 BeautyGRPO:重塑真实人像
算法·大模型·cvpr·影像
Darling噜啦啦3 天前
列表转树算法深度解析:从 Map 到 Reduce 的两种实现,面试高频考点
数据结构·算法·面试
用户497863050734 天前
(一)小红的数组操作
算法·编程语言