// 1. 输入一个字符串,输出最小替换几次,可以使这个字符串变成回文字符串functionfoo1(str){let left =0, right = str.length-1;let res =0;while(left<right){if(str[left++]!= str[right--]){
res++;}}return res;}
// 3. 在一个N*M 的格子中,问从(1,1)点走到(N,M)点有多少条路径,可以往上往左往右走。结果对10e9+7取模// 其实这个问题求的是M的n-1次方。functionfoo3_1(n,m){//这个方法只通过了40%constMOD=10e9+7;
n--;let res =1;while(n){if(n&1){
res*=m;
res%=MOD;}
n = n>>1;
m = m*m;
m%=MOD;}return res;}functionfoo3_2(n,m){//对两个数的乘法进行优化,这个方法通过了90%constMOD=10e9+7;constmulit=(a,b)=>{let str = a +''+b;if(str.length<16){return a*b%MOD;}let res =0;while(a>0){if(a&1){
res+=b;
res%=MOD;}
a = a>>1;
b*=2;
b%=MOD;}return res;}
n--;let res =1;while(n){if(n&1){
res =mulit(res, m);}
n = n>>1;
m =mulit(m,m);
m%=MOD;}return res;}
第四题
// 4. 给出一个区间数组,求可以最多的不重叠的区间数量// 例如[[1,2],[2,3],[3,4]] 答案是 2 ,[1,2] 和[3,4]functionfoo4(arr){if(arr.length<2){return arr.length;}
arr.sort((a,b)=>a[1]-b[1]);let pre = arr[0][1];let res =1;for(let i =1;i< arr.length;++i){if(pre<arr[i][0]){
pre = arr[i][1];
res++;}}return res;}