10道前端算法题

    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
console.log(isPalindrome(str));


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



function forming(str) {
//先全部转成小写 根据空格划分每个单词
var arr = str.toLowerCase().split(" “);
//遍历把每个单词首字母改成大写
for (var i = 0; i < arr.length; i++) {
arr[i] = arr[i].charAt(0).toUpperCase() + arr[i].slice(1);
}
//转回字符串
var str1 = arr.join(” ");
return str1;
}
var str = “i want to havE coffee.”;
console.log(forming(str));




你可能感兴趣的:(前端,算法,javascript)