【前端面试】Part 3:2020届初级前端校招笔试题及面经总结 —— 基础编程题

第1题:判断回文字符串

判断一个字符串是不是回文字符串

// 思路1 直接判断翻转后的字符串数组是否等于原数组
// 缺点:不能判断非顺序的回文
function checkPalindrom(str) {
    return str == str.split('').reverse().join('');
}
// 思路2 将字符串转化成字符串数组,将每位进行计数
// 回文成立:无奇数次、有且仅有一个奇数次
// 回文不成立:两次或多次奇数次

第2题:数组合并去重扁平化

function flatten() {

    // 数组扁平化
    var arr = [].concat.apply([], arguments);
    // 去重
    var arr = Array.from(new Set(arr));

    // 排序
    var arr = arr.sort(sortArr)
    return arr;
}

// 排序
function sortArr(a, b) {
    return a - b;
}

第3题:检查字符串中出现最多的元素

function findMaxDuplicateChar(str) {
    if (str.length == 1) {
        return str;
    }
    let charObj = {};
    for (let i = 0; i < str.length; i++) {
        if (!charObj[str.charAt(i)]) {
            charObj[str.charAt(i)] = 1;
        } else {
            charObj[str.charAt(i)] += 1;
        }
    }
    let maxChar = '',
        maxValue = 1;
    for (var k in charObj) {
        if (charObj[k] >= maxValue) {
            maxChar = k;
            maxValue = charObj[k];
        }
    }
    console.log("出现的最大次数", maxValue);
    // 出现次数最多的元素
    return maxChar;
}

第4题:求数组中元素的最大差值

function getMaxProfit(arr) {

    var minPrice = arr[0];
    var maxProfit = 0;

    for (var i = 0; i < arr.length; i++) {
        var currentPrice = arr[i];

        minPrice = Math.min(minPrice, currentPrice);

        var potentialProfit = currentPrice - minPrice;

        maxProfit = Math.max(maxProfit, potentialProfit);
    }

    return maxProfit;
}

第5题:不用中间变量交换(a=2,b=4)的值

// 方案A:利用加法
a = a + b ;
b = a - b ;
a = a - b ;

// 方案B:利用乘积
a = a * b ;
b = a / b ;
a = a / b ;

// 方案C:利用数组
a = [a, b];
b = a[0];
a = a[1];

// 方案D:利用与或
a = a ^ b;
b = a ^ b;
a = a ^ b;

第6题:货拉拉笔试第六题

var Test = {
    foo: "test",
    func: function () {
        var self = this;
        console.log(this.foo);
        console.log(self.foo);
        (function () {
            console.log(this.foo);
            console.log(self.foo)
        })()
    }
}
// 求打印结果
Test.func(); // test test undefined test

第7题:货拉拉第十六题

下列代码返回true的有:

[1,2,3,4,5].map(Number);	  // [1,2,3,4,5]
[1,2,3,4,5].forEach(Number);  // undefined
[1,2,3,4,5].some(Number);	  // true
[1,2,3,4,5].every(Number);	  // true


第8题:快速排序


function quickSort(arr){

 	// 判断长度
    // len < 1 return 本身
    // len > 1 进行快速排序
	if(arr.length < 1){
		return arr;
	}
	
    // 找出中位数(基数)
	let pivotIndex = Math.floor(arr.length / 2);
	// 找出中位数
	let pivot = arr.splice( pivotIndex , 1 )[0];

	// 创建左右数组容器
	let left = [];
	let right = [];
	
	// 进行快排 小放左 大放右
	for(let i = 0 ; i < arr.length ; i++){
		if(arr[i]<pivot){
			left.push(arr[i]);
		}else{
			right.push(arr[i]);
		}
	}

 	// 将完成的数组进行递归
	return quickSort(left).concat([pivot] , quickSort(right));
}


第8题:无重复最长子串

var lengthOfLongestSubstring = function (s) {

    // 创建一个长度和一个新的字符串
    let len = 0; // 新长度索引 用来记录新子串长度
    let str = ''; // 新子串 用来记录连续的新子串

    // 匹配字符 存在就拼接 不存在则剔除 从后一段截取
    for (let i = 0; i < s.length; i++) {

        // 判断 新子串 是否含有遍历元素
        // -1 为不存在
        if (str.indexOf(s[i]) === -1) {
            str = str + s[i];
            if (str.length > len) {
                len = str.length;
            }
        } else {
            str = str + s[i];
            let index = str.indexOf(s[i]);
            str = str.slice(index + 1);
        }
    }
    return len;
};

第9题:两数之和

// 采用冒泡比较两数之和
var twoSum = function (nums, target) {

    for (let i = 0; i < nums.length; i++) {

        for (let j = i + 1; i < nums, length; i++) {

            if (nums[i] + nums[j] === target) {
                return [i, j];
            }
        }
    }
}

你可能感兴趣的:(前端,JavaScript,React)