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

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

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()
相关推荐
白羊by28 分钟前
YOLOv1~v11 全版本核心演进总览
深度学习·算法·yolo
墨尘笔尖2 小时前
最大最小值降采样算法的优化
c++·算法
white-persist4 小时前
【vulhub shiro 漏洞复现】vulhub shiro CVE-2016-4437 Shiro反序列化漏洞复现详细分析解释
运维·服务器·网络·python·算法·安全·web安全
FL16238631295 小时前
基于C#winform部署软前景分割DAViD算法的onnx模型实现前景分割
开发语言·算法·c#
baizhigangqw5 小时前
启发式算法WebApp实验室:从搜索策略到群体智能的能力进阶
算法·启发式算法·web app
C雨后彩虹5 小时前
最多等和不相交连续子序列
java·数据结构·算法·华为·面试
cpp_25016 小时前
P2347 [NOIP 1996 提高组] 砝码称重
数据结构·c++·算法·题解·洛谷·noip·背包dp
Hugh-Yu-1301236 小时前
二元一次方程组求解器c++代码
开发语言·c++·算法
编程大师哥7 小时前
C++类和对象
开发语言·c++·算法
加农炮手Jinx7 小时前
LeetCode 146. LRU Cache 题解
算法·leetcode·力扣