第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];
}
}
}
}