数组相关算法题
第一题: 找出给定数组中的最大值。
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++;
}
}