10道前端算法题(1)

console.log(arr.reverse().join(‘,’));


![在这里插入图片描述](https://img-blog.csdnimg.cn/2021030315472161.png)



function getMaxLength(str) {
//最终长度
var result = 0;
//存储目前最大字串
var noRepeatStr = ‘’;
for (var i = 0; i < str.length; i++) {
var c = str.charAt(i);
var index = noRepeatStr.indexOf©;
if (index == -1) { //还没出现过的字符
noRepeatStr = noRepeatStr + c;
result = result < noRepeatStr.length ? noRepeatStr.length : result;
} else {
//肯定是第一个重复 取剩下的 + c
noRepeatStr = noRepeatStr.substr(1) + c;
}
}
return result;
}
console.log(getMaxLength(“abcdefg”));


![在这里插入图片描述](https://img-blog.csdnimg.cn/2021030316144696.png)



function sum(a, b) {
var min = Math.min(a.length, b.length);
var max = Math.max(a.length, b.length);
var length = max - min;
//字符串前面补0
for (var i = 0; i < length; i++) {
if (a.length > b.length) {
b = ‘0’ + b;
} else {
a = ‘0’ + a;
}
}
//转成数组并反转 (注意还是字符数组)
a = a.split(‘’).reverse();
b = b.split(‘’).reverse();
//初始化结果数组
var res = new Array(max);
for (var i = 0; i < max; i++) {
res[i] = 0;
}
//a、b相加
for (var i = 0; i < max; i++) {
var temp = parseInt(a[i]) + parseInt(b[i]) + parseInt(res[i]);
if (temp > 9) {
res[i] = temp - 10;
res[i + 1] = 1;
} else {
res[i] = temp;
}
}
//反转数组并转回字符串
return res.reverse().join(‘’);
}
console.log(sum(‘47393245’, ‘678794’)); //48072039


![在这里插入图片描述](https://img-blog.csdnimg.cn/2021030317105632.png)



function combine(arr) {

//对前两个子数组相乘
var arr1 = arr[0];
var arr2 = arr[1];
var length1 = arr1.length;
var length2 = arr2.length;
var newArr = new Array(length1 \* length2);
var index = 0;
for (var i = 0; i < length1; i++) {
    for (var j = 0; j < length2; j++) {
        newArr[index] = arr[0][i] + "," + arr[1][j];
        index++;
    }
}
//更新
var Arr = new Array(arr.length - 1);
Arr[0] = newArr;
for (var i = 2; i < arr.length; i++) {
    Arr[i - 1] = arr[i];
}
//递归中止条件
if (Arr.length == 1) {
    return Arr[0];
} else {
    return combine(Arr);
}

}
var arr = [[‘A1’, ‘B1’, ‘C1’], [‘A2’, ‘B2’, ‘C2’], [‘a3’, ‘b3’]];
var res = combine(arr);
console.log(res);


![在这里插入图片描述](https://img-blog.csdnimg.cn/20210303224836697.png)



function decidePrice() {
var n = 5;
var m = 6;
var want = [1, 2, 3, 4, 5, 6];
//记录价格
var price = 0;
//记录收益
var q = 0;
//对want数组进行升序排序
want = want.sort(function (a, b) {
return a - b;
});

//当供不应求时,不考虑出价较低者
if (n < m) {
    want = want.slice(m - n);
}
//遍历算出最大q
for (var i = 0; i < want.length; i++) {
    if (q < want[i] \* (want.length - i)) {
        q = want[i] \* (want.length - i);
        price = want[i];
    }
}
return price;

}

console.log(decidePrice());


![在这里插入图片描述](https://img-blog.csdnimg.cn/20210303231748893.png)



var s = “aaasdaddddddaf”;
//存储最大长度
var count = 0;
//存储出现次数最多的字符
var char = “”;

//s转换成数组并去重
function foo(s) {
//转换成数组
var arr = s.split(“”);
//去重
//filter过滤器 括号里一般接一个函数 返回满足条件的元素形成新的数组
//element代表元素组每一个元素
//index代表元素下标
//self可以理解为原数组arr
arr = arr.filter(function (element, index, self) {
return self.indexOf(element) === index; //第一个出现的字符,重复的就为false
});
return arr;
}
var arr = foo(s); //[‘a’,‘s’,‘d’,‘f’]
//对于原字符串,我们用不重复的字符分割,得到的新数组长度-1实际上就是该字符出现的次数
for (var i = 0; i < arr.length; i++) {
var cnt = s.split(arr[i]).length - 1;
if (cnt > count) {
count = cnt;
char = arr[i];
}
}
console.log(“count:” + count + “,char:” + char);


![在这里插入图片描述](https://img-blog.csdnimg.cn/20210304081128690.png)



//找到最小循环体,也许有别的方法,我这里是看出来的
var s = “1234567898765432”;
function getNum(n) {
return s.charAt(n % s.length - 1);
}
console.log(getNum(22));


![在这里插入图片描述](https://img-blog.csdnimg.cn/20210304082126966.png)



function changeToObj(url) {
//url形式:protocol://host[:port]/path/[?a=b&c=d]#fragment
//获取?和#的位置
var pos1 = url.indexOf(‘?’);
var pos2 = url.indexOf(‘#’);
var obj = {};
//获取查询片段xx=xx&xx=xx
if (pos1 == -1) { //?不存在
return obj;
} else if (pos2 != -1) { //#存在
url = url.slice(pos1 + 1, pos2);
} else {
url = url.slice(pos1 + 1);
}
// console.log(url);
//按照&分割
var urlArr = url.split(‘&’);
// console.log(urlArr);
//按照=划分
for (var i = 0; i < urlArr.length; i++) {
var arr = urlArr[i].split(‘=’);
//注意对象赋值属性用[]
obj[arr[0]] = arr[1];
}
return obj;
}
console.log(changeToObj(“protocol://host:port/path/?a=b&c=d#fragment”));


![在这里插入图片描述](https://img-blog.csdnimg.cn/2021030409001131.png)



function isPalindrome(str) {
//清除标点符号和空格 并转换成小写
var str1 = str.replace(/[^0-9a-zA-Z]/g, “”).toLowerCase();
//取反 正读反读都一样的话就是回文串
var str2 = str1.split(“”).reverse().join(“”);
if (str1 == str2) {
return true;
} else {
return false;
}
}
var str = “a))b*&c…ba…”; //true

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值