软件开发定制手撕前端javascript面试题---快速排序 | 全排列 | instanceof

✅ 作者简介:软件开发定制一名普通本科大三的学生,软件开发定制致力于提高前端开发能力
✨ 个人主页:
🔥 系列专栏 :
⭐️ 个人社区 :
🍀 学习格言: ☀️ 软件开发定制打不倒你的会使你更强!☀️
💯 刷题网站:软件开发定制这段时间有许多的小伙软件开发定制伴在问有没有什么好的刷题网站,软件开发定制博主在这里给大家推荐软件开发定制一款刷题网站:👉👈软件开发定制支持多种编程语言的学习,各大互联网大厂面试真题,从基础到拔高,快来体验一下吧!


🔥前言

在我们手撕题之前,先给大家介绍一下牛客网,Leetcode有的刷题牛客都有,除此之外牛客里面还有招聘(社招和校招)、一些上岸大厂的大佬的面试经验。 牛客是完全免费的,从学校到社会工作,时时刻刻你都可以用到,感兴趣的小伙伴们可以去注册试试==>


📃目录

描述:
请补全JavaScript代码,要求将数组参数中的数字从小到大进行排序并返回该数组。

注意:

  1. 数组元素仅包含数字
  2. 优先使用快速排序方法

示例1:
输入:_quickSort([0,-1,1,-2,2])
输出:[-2,-1,0,1,2]

题解:

<script type="text/javascript">            const _quickSort = array => {                // 补全代码                if(array.length <= 1) return array                let middleIndex = Math.floor(array.length /2)                let middle = array.splice(middleIndex,1)[0]                let left = []                let right = []                for(let i =0;i<array.length;i++) {                    array[i] < middle ? left.push(array[i]) : right.push(array[i])                }                return [..._quickSort(left),middle,..._quickSort(right)]            }        </script>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

这里考察了数据结构中常见的排序方式—快速排序,思路很简单,找出中位数,随后定义左右两个数组,凡是比中位数小的数字就添加到左数组中,比中位数大的数组添加到右数组,然后进行递归,最后运用es6中的数组拓展符将左数组中位数右数组连接起来返回出去!

全排列

描述:
请补全JavaScript代码,要求以数组的形式返回字符串参数的所有排列组合
注意:

  1. 字符串参数中的字符无重复且仅包含小写字母
  2. 返回的排列组合数组不区分顺序

示例1:
输入:_permute('abc')
输出:['abc','acb','bac','bca','cab','cba']

题解:

<script type="text/javascript">    const _permute = string => {        // 补全代码        if(string.length === 1) {            return [string]        };        let arr = string.split('');          let result = []; // 存放每次生成的排列串            for(let i = 0; i < arr.length; i++) {                   restArr = arr.filter(item => item !== arr[i]);                   let newArr = _permute(restArr.join(''));                   result = result.concat(newArr.map(item => arr[i] + item));           }        return result;     }</script>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

本题对全排列进行一个考察,首先判断传来的字符串长度,如果是1,直接转成数组返回。,如果不为1,就可以将abc字符串分为左右两部分,就变成了求:a + bc的全排列,左部分是arr[i],右部分是除去arr[i]的字符串,通过filter函数过滤出来,循环遍历每一个递归的结果数组,将当前的左部分 和每一个右部分 返回的全排列数组拼接,作为新的返回值。

instanceof

描述:

请补全JavaScript代码,要求以Boolean的形式返回第一个实例参数是否在第二个函数参数的原型链上

题解:

<script type="text/javascript">            const _instanceof = (target, Fn) => {                // 补全代码                return Fn.prototype.isPrototypeOf(target)            }</script>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

这一题只要你知道原型对象中有一个方法isPrototypeOf()就可以轻松破解此题。该方法用于判断当前对象是否为另外一个对象的原型,如果是就返回 true,否则就返回 false。
注意:只要调用者在传入对象的原型链上,都会返回true

小结

牛客的前端面试题是由浅入深的,难度是在逐步增加,今天的三道题相对来说就有点难度了,牛客的难度划分做的是非常的友好,看到这里是不是对这款软件动了心?那就点击链接,注册一个牛客号,开始你的手撕面试题之路吧==>💯

网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发