常见前端算法题一

1.二分法查找

例如:给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。

输入: nums = [1,3,5,6], target = 3
输出: 1
var searInset = function(nums,target){
    let min=0
    let max=nums.length-1
    while(min<max){
        let mid=Math.floor((max+min)/2)
        if(nums[mid] === target){
            return mid
        }else if(nums[mid] < target){
            min=min+1
        }else{
            max=max-1
        }
    }
    return min  //如果数组中没有查找到,就返回它应该插入的位置的索引
}
let arr=[1,3,4,5,6]
let arr1=[1,2,3,4,5]
console.log(searInset(arr,2)) //1
console.log(searInset(arr1,3)) //2

2.无重复字符串

splice() 方法用于添加或删除数组中的元素。这种方法会改变原始数组。

语法:array.splice(index,howmany,item1,.....,itemX)

index:必需。规定从何处添加/删除元素。该参数是开始插入和(或)删除的数组元素的下标,必须是数字。

howmany:可选。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。

item1, ..., itemX:可选。要添加到数组的新元素

indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置。

如果没有找到匹配的字符串则返回 -1。

 var arr='abcbdea';
        var arr1='aba'
        function checkString(arg){
            let map =[];
            var  max=0;
           for(let i=0;i<arg.length;i++){
               let index=map.indexOf(arg[i]);
               if(index !=-1){
                   map.splice(0,index+1)

               }
               map.push(arg[i]);
               max=Math.max(map.length,max)
               
           }
           return max;
        }
   console.log(checkString(arr)) //5
   console.log(checkString(arr1))  //2

3.数组扁平化

       // 第一种方法 flat()
        var arr=[1,[1,2,3],[1,2,[2,3,[4]]]]
        //  Infinity关键字作为参数时,无论嵌套多少层,都会转化成一维数组
        let arr1 = [...new Set(arr.flat(Infinity))] //进行去重操作
        console.log(arr1)
        // 第二种方法一次性栈方法
        function bp(arg){
            let result =[]
            let stack =[...arg]
            
            while(stack.length !==0){
                 let val = stack.pop()
                 if(Array.isArray(val)){
                    //如果是数组就再次入栈,并展开一层
                    stack.push(...val)
                }else{
                    result.unshift(val)
                }
                
            }
            return result
        }
        console.log(bp(arr))

4.有效括号

  function kh(s){
            let ss={
                '{':'}',
                '(':')',
                '[':']',
            }
            let stack=[]
            for(let i=0; i<s.length; i++){
               if(ss[s[i]]){
                   stack.push(s[i])
               }else if(s[i] !==ss[stack.pop()]){
                   return false
               }
            }
            return stack.length ===0
        }
        var bb='[({})]'
        console.log(kh(bb)) //true

5.判断是否是回文数

charAt() 方法可返回指定位置的字符。

第一个字符位置为 0, 第二个字符位置为 1,以此类推.

       //第一种方法。利用数组的charAt方法
       function hw(arr){
            if(typeof arr !== 'string')return false;
            let i=0;let j=arr.length-1
            while(i<j){
                if(arr.charAt(i) !==arr.charAt(j))return false;
                i++;
                j--;
            }
            return true;

        }
        console.log(hw('abcd'))  //false
        console.log(hw('aabbaa')) //true
        // 第二种方法利用Api来判断
        function hh(arr){
            if(typeof arr !=='string')return false;
            return arr.split('').reverse().join('') == arr
        }
        console.log(hh('aabbaa'))
        console.log(hh('qwer'))

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值