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

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

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()
相关推荐
GIS瞧葩菜几秒前
Cesium 轴拖拽 + 旋转圈拖拽 核心数学知识
人工智能·算法·机器学习
m0_686041617 分钟前
C++中的适配器模式变体
开发语言·c++·算法
txzrxz8 分钟前
结构体排序,双指针,单调栈
数据结构·算法·双指针算法·单调栈·结构体排序
AndrewHZ11 分钟前
【AI黑话日日新】什么是AI智能体?
人工智能·算法·语言模型·大模型·llm·ai智能体
wWYy.13 分钟前
算法:二叉树最大路径和
数据结构·算法
葱明撅腚14 分钟前
利用Python挖掘城市数据
python·算法·gis·聚类
We་ct17 分钟前
LeetCode 36. 有效的数独:Set实现哈希表最优解
前端·算法·leetcode·typescript·散列表
weixin_3954489128 分钟前
main.c_cursor_0129
前端·网络·算法
CS创新实验室41 分钟前
《计算机网络》深入学:路由算法与路径选择
网络·计算机网络·算法
一条大祥脚41 分钟前
ABC357 基环树dp|懒标记线段树
数据结构·算法·图论