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);