冒泡排序
将 前面的跟后面的对比一次排出最大的一位 列如: [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());
Z形状变换 更过请看
/**
前言:一开始做这道题目的时候,蹦出来的第一个想法就是数组矩形,模拟z然后在
解析出来,做是可以做出来,但是打开评论区就感觉完全不是一个世界的生物好吧,智商完全不
在一条线上好吧
这个解法就是
1. 当超过行值的时候永远会减一, 就相当于永远不会取到第一个和最后一个
呃越解释越乱 反正就是中间的一直重复
*/
var convert = function (s, numRows) {
const groupArr = Array.from({length: numRows}, () => '');
var loc = 0,
flag = -1;
for (var c of s) {
groupArr[loc] += c
if (loc === 0 || loc === numRows - 1) flag = -flag;
loc += flag;
}
return groupArr.join('')
};