1、不借助臨時變量,進行兩個整數的交換
//方法一 ES6數組
var a = 1, b = 2; [a,b] = [b,a]; console.log(a,b)
// 方法二 異或運算,同爲0或者同爲1都爲0,10爲1code
var c = 3, d = 4; c = c ^ d; d = c ^ d; c = c ^ d; console.log(c,d)
2、字符串查找:請使用最基本的遍從來實現判斷字符串 a 是否被包含在字符串 b 中,並返回第一次出現的位置(找不到返回 -1)。遞歸
例子:索引
a='34';b='1234567'; // 返回 2 a='35';b='1234567'; // 返回 -1 a='355';b='12354355'; // 返回 5 isContain(a,b);
答案:字符串
function isContain(a, b) { for (let i in b) { if (a[0] === b[i]) { let tmp = true; for (let j in a) { if (a[j] !== b[~~i + ~~j]) { tmp = false; } } if (tmp) { return i; } } } return -1; }
3、統計一個字符串出現最多的字母:給出一段英文連續的英文字符竄,找出重複出現次數最多的字母get
例子:it
輸入 : afjghdfraaaasdenas 輸出 : a
答案:io
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]; } } return maxChar; } module.exports = findMaxDuplicateChar;
4、找出下列正數組的最大差值console
例子:function
輸入 [10,5,11,7,8,9]
輸出 6
答案:
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、斐波那契數列:一、一、二、三、五、八、1三、21。輸入n,輸出數列中第n位數的值。
方案一:
function fn(n){ var num1 = 1, num2= 1, num3 = 0; for(var i=0;i<n-2;i++){ num3 = num1+num2; num1 = num2; num2 = num3; } return num3; } console.log(fn(7)) //13
方案二:
function fn(n){ if(n<=2){ return 1; } return fn(n-1)+fn(n-2); } console.log(fn(7)) //13
6、用js實現二分查找:二分查找的前提是有序數組
例子:
將要查找的值每次與中間值比較,大於中間值,則在右邊進行相同的查找,小於中間值則在左邊進行比較查找,找到返回索引值,沒找到返回-1。
1.非遞歸:
function binarySearch(target,arr){ var start = 0; var end = arr.length-1; while(start <= end){ var mid = parseInt((start+end)/2); if(target == arr[mid]){ return mid }else if(target > arr[mid]){ start = mid + 1; }else if(target < arr[mid]){ end = mid - 1; }else{ return -1; } } } var arr = [1,2,4,6,8,9,11,34,67]; console.log(binarySearch(11,arr));
2.遞歸:
function binarySearch(arr,target,start,end){ var start = start || 0; var end = end || arr.length-1; var mid = parseInt((start+end)/2); if(target == arr[mid]){ return mid }else if(target > arr[mid]){ start = mid + 1; return binarySearch(arr,target,start,end); }else if(target < arr[mid]){ end = mid - 1; return binarySearch(arr,target,start,end); }else{ return -1; } } var arr = [1,2,4,6,8,9,11,34,67]; console.log(binarySearch(arr,11));
7、數組去重
方案一:
`function fn(arr){
var obj = {}; var newArr = []; for(var i=0;i<arr.length;i++){ if(!obj[arr[i]]){ obj[arr[i]] = 1; newArr.push(arr[i]); } } return newArr;
}
var arr = [2,4,7,3,5,2,8,7];
console.log(fn(arr));`
方案二:
var arr = [2,4,7,3,5,2,8,7]; var setArr = new Set(arr); var newArr = Array.from(setArr); console.log(newArr);
方案三:
var arr =[1,2,2,4,5,4,11,6]; function fn(arr){ var a=arr; for(var i=0;i<a.length;i++){ for(var j=a.length-1;j>i;j--){ if(a[i]==a[j]){ a.splice(j,1); } } } return a; } var s=fn(arr); console.log(s);