资讯专栏INFORMATION COLUMN

分享两道大厂前端面试题

whjin / 824人阅读

摘要:示例输入输出示例输入输出第一种方法滑动窗口解法滑动窗口两个边界情况第二种方法位运算解法位运算头条财经部门一面二维数组的回形遍历这是头条财经部门一面的一道题记住遍历过的索引更多前端算法题,参见算法仓库。

1. 百度百家号一面

面完回来搜素,才发现这道题其实是LeetCode540。

540 medium 有序数组中的单一元素

给定一个只包含整数的有序数组,每个元素都会出现两次,唯有一个数只会出现一次,找出这个数。

示例 1:
输入: [1,1,2,3,3,4,4,8,8]
输出: 2

示例 2:
输入: [3,3,7,7,10,11,11]
输出: 10

第一种方法:滑动窗口
/**
 * 解法1:滑动窗口
 * @param {number[]} nums
 * @return {number}
 */
var singleNonDuplicate = function(nums) {
    for (let i = 0; i < nums.length; i++){
        // 两个边界情况
        if (i === 0 && nums[i]!==nums[i+1])return nums[i];
        if (i === nums.length - 1 && nums[i]!==nums[i-1])return nums[i];

        if (nums[i] !== nums[i+1] && nums[i] !== nums[i-1]){
            return nums[i]
        }
    }

};
第二种方法:位运算
/**
 * 解法2:位运算
 * @param {number[]} nums
 * @return {number}
 */
var singleNonDuplicate2 = function(nums) {
    let a = nums[0]
    for (let i = 1; i < nums.length; i++){
        a = a ^ nums[i]
    }
    return a;
};
头条财经部门一面

二维数组的回形遍历

// 这是头条财经部门一面的一道题

let arr2 = [
    [1,2,3,4],
    [5,6,7,8],
    [9,10,11,12]
]

let fn = (arr) => {
    let rowNumber = arr.length;
    let colNumber = arr[0].length;


    let printArr = [arr[0][0]];
    let rowIndex = 0;
    let colIndex = 0;
    let moveDirection = "down";
    let hash = {"00": true}; // 记住遍历过的索引
    let total = rowNumber * colNumber - 1;
    while(total > 0){
        if (moveDirection === "down"){
            if (rowIndex === rowNumber - 1){
                moveDirection = "right"
                continue;
            } else if (hash[rowIndex + 1 + "" + colIndex]){
                moveDirection = "right"
                continue;
            }
            rowIndex++;

        } else if (moveDirection === "right") {
            if (colIndex === colNumber - 1){
                moveDirection = "up"
                continue;
            } else if (hash[rowIndex + "" + (colIndex + 1)]){
                moveDirection = "up"
                continue;
            }
            colIndex++;

        } else if (moveDirection === "up"){
            if (rowIndex === 0){
                moveDirection = "left"
                continue;
            } else if (hash[rowIndex - 1 + "" + colIndex]){
                moveDirection = "left"
                continue;
            }
            rowIndex--;

        } else if (moveDirection === "left"){
            if (colIndex === 0){
                moveDirection = "down"
                continue;
            } else if (hash[rowIndex + "" + (colIndex - 1)]){
                moveDirection = "down"
                continue;
            }
            colIndex--;
        }

        printArr.push(arr[rowIndex][colIndex]);
        hash[rowIndex + "" + colIndex] = true;

        total--;
    }

    return printArr;
}
console.log(fn(arr2));

更多前端算法题,参见LeetCode算法仓库。
GitHub:https://github.com/cunzaizhuy...
欢迎star!!!
这里有60多道已经提交通过的LeetCode题目,每天都在更新~~~

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/110001.html

相关文章

  • 【周刊-2】三年大厂面试官-前端面试(偏难)

    摘要:前言在大厂工作了年,当了年的前端面试官,把大厂常问的面试题与答案汇总在我的中。第题如何劫持的请求,提供思路难度阿里腾讯很多人在上搜索前端面试详解,把答案倒背如流,但是问到如何劫持请求的时候就一脸懵逼,是因为还是停留在理论性阶段。前言 在大厂工作了6年,当了3年的前端面试官,把大厂常问的面试题与答案汇总在我的Github中。希望对大家有所帮助,助力大家进入自己理想的企业。 项目地址是:git...

    silvertheo 评论0 收藏0
  • 【周刊-2】三年大厂面试官-前端面试(偏难)

    摘要:前言在大厂工作了年,当了年的前端面试官,把大厂常问的面试题与答案汇总在我的中。第题如何劫持的请求,提供思路难度阿里腾讯很多人在上搜索前端面试详解,把答案倒背如流,但是问到如何劫持请求的时候就一脸懵逼,是因为还是停留在理论性阶段。 前言 在大厂工作了6年,当了3年的前端面试官,把大厂常问的面试题与答案汇总在我的Github中。希望对大家有所帮助,助力大家进入自己理想的企业。 项目地址是:...

    madthumb 评论0 收藏0
  • 【周刊-2】三年大厂面试官-前端面试(偏难)

    摘要:前言在大厂工作了年,当了年的前端面试官,把大厂常问的面试题与答案汇总在我的中。第题如何劫持的请求,提供思路难度阿里腾讯很多人在上搜索前端面试详解,把答案倒背如流,但是问到如何劫持请求的时候就一脸懵逼,是因为还是停留在理论性阶段。 前言 在大厂工作了6年,当了3年的前端面试官,把大厂常问的面试题与答案汇总在我的Github中。希望对大家有所帮助,助力大家进入自己理想的企业。 项目地址是:...

    joywek 评论0 收藏0
  • 字节跳动Python后端开发岗,已拿offer

    摘要:今年岁,毕业之后进入一家小型的互联网公司工作,名字就不说了,算是熟知的,在这家公司呆了两年,直至今年才有了跳槽的想法。在众多大厂中,最终选择了字节跳动。这样的调整,一方面对自己学习有帮助,另一方面让自己应对面试更从容,更顺利。 ...

    JasonZhang 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<