1. 字符串查找:请使用最基本的遍历来实现判断字符串 a 是否被包含在字符串 b 中,并返回第一次出现的位置(找不到返回 -1)。
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 ;
}
2. 统计一个字符串出现最多的字母:给出一段英文连续的英文字符窜,找出重复出现次数最多的字母。
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;
}
3. 斐波那契数列:1、1、2、3、5、8、13、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 ) )
function fn ( n) {
if ( n<= 2 ) {
return 1 ;
}
return fn ( n- 1 ) + fn ( n- 2 ) ;
}
console. log ( fn ( 7 ) )
4. 用js实现二分查找:二分查找的前提是有序数组。
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) ) ;
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 ) ) ;