几道JavaScript算法题(数组)

这篇博客主要探讨了六道关于JavaScript数组的算法题目,包括找出数组中的最大值、统计最多字符及其个数、寻找连续数组中的缺失值、找到数组内相加为10的数、将多维数组转化为一维以及从二维数组中组合新数据的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数组相关算法题

第一题: 找出给定数组中的最大值。

var arr = [19,96,35,53,76];
    var max =arr[0];
    var maxIndex = 0;
    for(var i = 0;i<arr.length;i++){
        if(arr[i]>max){
            max = arr[i];
            maxIndex = i;
        }
        max = arr[i]?arr[i]:max;
    }
    console.log(max);

第二题: 统计字符串里面哪个字符最多和该字符的个数。

var str = 'narsnarsnarsnarsssssssss';
    //定义一个空数组用于存放找到的结果,包含个数最多的字符串以及它的个数
    var save = [];
    for (var k = 0; k < str.length; k++) {
        //拿到每一个字符
        var char = str.charAt(k);
        //定义一个用于计数的变量,来记录当前元素的个数
        //因为当前元素已经有了一个,所以从1开始
        var count = 1;
        for (var i = k + 1; i < str.length; i++) {
            //当找到后面有元素和当前k索引位的元素相同时,计数变量自增
            if (char == str[i]) {
                count++;
                //将arr字符串分割为字符串数组
                var arr = str.split("");
                //为减少工作量,使得后续字符不再查找已经查找过的元素,所以删除已经查找过的元素
                arr.splice(i, 1);
                //再将删除元素后的arr数组转化为字符串赋给原字符串
                str = arr.join("");
                //删除之后内部的索引自动修改
                i--;
            }
        }
        //当后面有字符的个数大于前面的字符个数时,先把数组清空,然后替换为个数更多的
        if (count > save[1]) {
            save = [];
            save[0] = char;
            save[1] = count;
        }
        //如果出现后面的字符的个数和前面字符的个数相同,则将后面的字符也继续追加进去
        else if (count == save[1]) {
            save.push(char);
            save.push(count);
        }
        //当k为初始值,也就是第一次走前面代码时,把结果追加给定义的空数组
        if (k == 0) {
            save.push(char);
            save.push(count);
        }
    }
    console.log(save);

第三题: 找数组内部缺失值,数组值是连续的。

var arr = [1, 3, 5, 7, 9, 2, 4, 6, 0];
    /!*修改对象内部对象指针,传递参数的方法
     *1.call:传递的参数是序列型
     *2.apply:传递的参数是集合型*!/
    var min = Math.min.apply(null, arr);
    var max = Math.max.apply(null, arr);
    for (var i = min; i <= max; i++) {
        if (arr.indexOf(i) == -1) {
            console.log(i);
        }
    }

第四题: 找数组内部相加结果为十的数。

var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
    var totle = 10;
    for (var i = 0; i < arr.length; i++) {
        var target = arr[i];
        var value = totle - target;
        var index = arr.indexOf(value);
        if (index != -1 && index != i) {
            console.log(target, arr[index]);
            arr.splice(index, 1);
            i--;
        }
    }

第五题: 把多维数组拆为一维数组。

var arr = [1, [2, 3], [[4, 5, 6], [7, 8, 9]], [[[10, 11]], [[12, 13]]]];
    var list = [];
    function NewArray(array) {
        for (var i = 0; i < array.length; i++) {
            //判断是否为数组
            if (Array.isArray(array[i])) {
                NewArray(array[i]);
            }
            //如果不是数组,直接追加到list里面
            else {
                list.push(array[i]);
            }
        }
    }
    NewArray(arr);
    console.log(list);

第六题: data为二维数组,其长度和子数组长度均不定,每个子数组取出一个元素,组合成一系列新的数据。

var data = [["A", "B", "C"],["D", "E"], [1, 2]]
    var [a,b,c]=data;
    var i = 0, k = 0, j = 0;
    while (i < a.length && k < b.length && j < c.length) {
        var str = a[i] + b[k] + c[j];
        //调用字符串组合的方法
        CountString(str);
        //先走完j里面的字符,然后走完k的,最后走完i的
        j++;
        if (j >= c.length) {
            j = 0;
            k++;
        }
        if (k >= b.length) {
            k = 0;
            j = 0;
            i++;
        }
    }
    //每个字符串的几种组合
    function CountString(s) {
        //将字符串分割成字符串数组,如:[1,2,3,4]这样的。
        var sarray = s.split("");
        var c = 0;
        while (c < sarray.length) {
            //把当前对应开头值取出来
            var kai = sarray[c];
            //在原数组中去掉开头的值,留下剩余值
            var arrinfo = [];
            sarray.map(function (value, index) {
                arrinfo.push(value);
            });
            arrinfo.splice(c, 1)
            console.log(kai + arrinfo.join(""));
            console.log(kai + arrinfo.reverse().join(""));
            c++;
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值