算法面试题目

1. 数组去重

有一个数组 [ 7, 8, 3, 5, 1, 2, 4, 3, 1 ],写一个diff方法来“去重”并“输出从大到小”的“货币格式”。期望结果:"8,754,321"
const arr = [ 7, 8, 3, 5, 1, 2, 4, 3, 1 ];
let unique = [...new Set(arr)].sort((a,b) => a-b)
let a = unique.map((item,index) => {
if (index % 3 === 0 && index !==0) {
return item + ','
}
return item
}).reverse().join('')
console.log(a);

2. 异步串行加载

有一个数组:const imgs = ['url1', 'url2', 'url3', ...];

请实现效果:

//1)回调函数实现
function loadImage(imgs) {
  const img = new Image();
  const url = imgs.shift();
  if (url) {
    img.src = url;
    img.onload = function() {
      if (imgs.length > 0)
      loadImage(imgs)
    }
  } 
}
// 2)async await-promise实现
function loadImage(url) {
  return new Promise((resolve, reject) => {
    const img = new Image();
    img.src = url;
    img.onload = function() {
      resolve()
    }
  })
}
async function loadImages() {
  for(let url of imgs) {
    await loadImage(url);
  } 
}

3. 数组遍历

按照图片数组顺序队列加载图片(注:加载完一张再加载下一张)
写一个有效的算法完成矩阵搜索,这个矩阵有如下特点:
1) 矩阵中的每行数字都是经过排序的,从左到右依次变大。
2) 每行的第一个数字都比上一行的最后一个数字大

// 例如:

let arr = [
  [2, 4, 8, 9],
  [10, 13, 15, 21],
  [23, 31, 33, 51]
]
function findValue(num) {
  const maxOfArr = arr.map(item => item[item.length - 1]);
  let innerIndex = 0;
  for(let i of maxOfArr) {
    console.log(i)
    if (num <= i) {
      innerIndex = maxOfArr.indexOf(i);
      break;
    }
  }
  return !!(arr[innerIndex].find(item => item === num))
}
console.log(findValue(21));

猜你喜欢

转载自www.cnblogs.com/lyraLee/p/12077127.html