【2021.07】前端需要会的算法题与思路提示


一、数组去重 (能想到的方法)

对象、set、includes(indexof)、concat(push)

二、冒泡排序

比较轮和次数

三、快速排序

二分法,左中右通过concat连接

四、插入排序

类似抓牌,取第一张放入

五、判断回文数

数组反转再转字符串

六、多维数组扁平化处理

方法一:使用数组自带方法flat(Infinity)

const res = arr.flat(Infinity)

方法二:使用正则

const res = JSON.Stringify(arr).replace(/[|]/g,’’).split(“,”)

方法三:改良正则

const res = JSON.parse( ‘[’ + JSON.Stringify(arr).replace(/[|]/g,’’)+’]’)

方法四:使用reduce

const flatten= arr => {
	return arr.reduce((pre,cur) => {
		return pre.concat(Array.isArray(cur)?flatten(cur):cur)
	},[])
}
const  res = flatten(arr)

方法五:使用递归

const res = []
const fn = arr => {
	for(let i=0; i<arr.length; i++){
		if(Array.isArray(arr[i])){
			fn(arr[i])
		}else{
		res.push(arr[i])
		}
	}
}
fn(arr)

七、所有和为n的连续正数序列

八、数组中找出和为N的两个正数

九、具有最大和的连续子数组

十、合并两个有序数组

十一、斐波那契数列

十二、寻找两个正序数组的中位数

/*
 * @Author: jinx
 * @Date: 2021-07-05 10:52:53
 * @LastEditors: jinx
 * @Descripttion: 文件描述
 */
function findMedianSortedArrays (a,b) {
  let indexA = 0, indexB = 0, result = []
  while (a[indexA] !== undefined && b[indexB] !== undefined) {
      if (a[indexA] > b[indexB]) {
          result.push(b[indexB++])
      } else if (a[indexA] < b[indexB]) {
          result.push(a[indexA++])
      } else {
          result.push(a[indexA++])
          result.push(b[indexB++])
      }
  }
  if (a[indexA] !== undefined) {
      for (let i = indexA; i < a.length; i++) {
          result.push(a[i])
      }
  }
  if (b[indexB] !== undefined) {
      for (let i = indexB; i < b.length; i++) {
          result.push(b[i])
      }
  }
  let middleLength = parseInt(result.length / 2)
  if(result.length % 2 == 0){
      return (result[middleLength] + result[middleLength - 1]) /2
  } else {
      return result[middleLength]
  }
}
let result = findMedianSortedArrays([1,1,1,1,1,1,1,1,1,1,4,4],[1,3,4,4,4,4,4,4,4,4,4])
console.log(result)

十三、手写map

function map(arr,mapCallback) {
	//检测参数是否正确
	if(!Array.isArray(arr) || !arr.length || typeof mapCallback !=function){
		return []
	}else{
		//进行下面操作
		let result = []
		for(let i =0 ;i <arr.length; i++){
			result.push(mapCallback(arr[i],i,arr))
		}
	return result
	}
}
var res = map(arr,(item)=>{
return item*2
})

总结

一直觉得笨一点没关系,只要我保持学习,总有一天会飞起来。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值