【前端面試】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];
            }
        }
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章