阅读 72

常用算法记录

冒泡排序

将 前面的跟后面的对比一次排出最大的一位 列如: [3,5,2,4,1] [3,2,4,1,5] [2,3,4,1,5] [2,3,1,4,5] ...


 const arr = new Array(10000).fill().map((v, i) => 10000 - i)
    for (let i = 0; i < arr.length; i++) {
       for (let j = 0; j < arr.length - i; j++) {
           if (arr[j] > arr[j + 1]) {
           let tem = arr[j + 1]
           arr[j + 1] = arr[j]
           arr[j] = tem
        }
     }
}

console.log(arr)

复制代码

投票法 更多请看

 /**
  lettcode  面试题 17.10. 主要元素
  学习了学习了
  评论区看到的  之前还不知道投票法是啥
  1.我们通过生成2个变量进行记录当前出现的 次数 以及该 变量 是谁
  2.然后进行抵消计算 是同一个数加一 不是减一
  3.最后留下的数 进行验证是不是最大
  4.反正就相当 红黑 2支队伍 打仗 最后谁还剩下一人 那个人就配拥有进入殿堂验证自己是不是最强者
*/
var majorityElement = function(nums) {
    let [conunt,res] = [0,0]

    for (let i = 0; i< nums.length; i++) {
        let num = nums[i]
        if (conunt === 0) res = num
        if (res === num) conunt++
        else conunt--
    }

    conunt = 0
    for (let i = 0; i < nums.length; i++) if (res === nums[i]) conunt++
    
    return conunt > nums.length >> 1 ? res : -1
};
复制代码

交换法 更过请看

var Solution = function (nums) {
  this.value = nums;
};

/**
 * @return {number[]}
 */
Solution.prototype.reset = function () {
  return this.value;
};

/**
 * @return {number[]}
 */
 /*
 这里我们通过随机出来的值与正常值的位置进行交换达到随机的效果
 [2, 1, 3] 1 'v;' 1 'num;' 2 'val;'
 [1, 2, 3] 1 'v;' 0 'num;' 2 'val;'
 [3, 2, 1] 3 'v;' 0 'num;' 1 'val;'
 */
Solution.prototype.shuffle = function () {
  const value = [...this.value];
  value.forEach((v, i) => {
    const randomNum = Math.floor(Math.random() * value.length);
    const randomNumVal = value[randomNum];
    value[randomNum] = v;
    value[i] = randomNumVal;
    console.log(value, v, "v;", randomNum, "num;", randomNumVal, "val;");
  });
  return value;
};
const a = new Solution([1, 2, 3]);
console.log(a.shuffle());
复制代码
文章分类
前端
文章标签