在学习FCC中级算法这一块,自己遇到了很多问题,通过RSA也慢慢把问题解决了,发现每一个问题都会有很多的解决思路,因此把自己想到的一些思路记录到这里。
我们会传递给你一个包含两个数字的数组。返回这两个数字和它们之间所有数字的和。
function sumAll(arr) { var sum=0; var max=Math.max.apply(null,arr); var min=Math.min.apply(null,arr); for(var i=min;i<=max;i++){ sum += i; } return sum; }
Sn = n * (a1 + an) / 2 //等差公式
function sumAll(arr) { return (arr[0] + arr[1]) * (Math.abs(arr[1] - arr[0]) + 1) / 2; }
比较两个数组,然后返回一个新数组,该数组的元素为两个给定数组中所有独有的数组元素。
function diff(arr1,arr2){ var newArray1=arr1.filter(function(val){ return arr2.indexOf(val)===-1;}); var newArray2=arr2.filter(function(val){ return arr1.indexOf(val)===-1;}); return newArray1.concat(newArray2); }
function diff(arr1, arr2) { var newArr = []; for(var i=0;i<arr1.length;i++){ if(arr2.indexOf(arr1[i])==-1){ newArr.push(arr1[i]); } } for(var j=0;j<arr2.length;j++){ if(arr1.indexOf(arr2[j])==-1){ newArr.push(arr2[j]); } } // Same, same; but different. return newArr; }
将给定的数字转换成罗马数字。
function convert(num) { const numArr=[1, 4, 5, 9, 10, 40, 50, 90, 100, 400, 500, 900, 1000]; const romArr=[‘I‘, ‘IV‘, ‘V‘, ‘IX‘, ‘X‘, ‘XL‘, ‘L‘, ‘XC‘, ‘C‘, ‘CD‘, ‘D‘, ‘CM‘, ‘M‘]; var str=""; for(var i=numArr.length-1;i>=0;i--){ for(;num>=numArr[i];num-=numArr[i]){ str+=romArr[i]; } } return str; }
写一个 function,它遍历一个对象数组(第一个参数)并返回一个包含相匹配的属性-值对(第二个参数)的所有对象的数组。
function where(collection, source) { var arr=[]; var keys=Object.keys(source); arr=collection.filter(function(val){ for(var i in keys){ if(!val.hasOwnProperty(keys[i])||val[keys[i]]!==source[keys[i]]){ return false; } } return true; }); return arr; }
使用给定的参数对句子执行一次查找和替换,然后返回新句子。
第一个参数是将要对其执行查找和替换的句子。
第二个参数是将被替换掉的单词(替换前的单词)。
第三个参数用于替换第二个参数(替换后的单词)。
function myReplace(str, before, after) { if(before[0]==before[0].toUpperCase()){ after=after[0].toUpperCase()+after.slice(1); } str=str.replace(before,after); return str; }
把指定的字符串翻译成 pig latin。
Pig Latin 把一个英文单词的第一个辅音或辅音丛(consonant cluster)移到词尾,然后加上后缀 "ay"。
如果单词以元音开始,你只需要在词尾添加 "way" 就可以了。
function translate(str) { let astr="aeiou"; if(astr.indexOf(str[0])!=-1){ return str+"way"; }else{ for(let i in str){ if(astr.indexOf(str[0])==-1){ str=str.slice(1)+str[0]; }else{ return str+"ay"; } } } return str; }
function translate(str) { let astr="aeiou"; let index=0; for(let i in str){ if(astr.indexOf(str[i])!=-1){ index=i; break; } } return index == 0 ? str + "way" : str.slice(index)+str.substr(0,index)+"ay"; }
DNA 链缺少配对的碱基。依据每一个碱基,为其找到配对的碱基,然后将结果作为第二个数组返回。
Base pairs(碱基对) 是一对 AT 和 CG,为给定的字母匹配缺失的碱基。
在每一个数组中将给定的字母作为第一个碱基返回。
碱基对一共只有4种情况,根据给出的碱基,返回对应的数组,追加到新数组中。
function pair(str) { let arr=[]; let newArr=[]; arr=str.split(""); for(let i in arr){ switch(arr[i]){ case "A":newArr.push([arr[i],"T"]); break; case "T":newArr.push([arr[i],"A"]); break; case "C":newArr.push([arr[i],"G"]); break; case "G":newArr.push([arr[i],"C"]); break; } } return newArr; }
创建两个数组,分别存储[‘A‘, ‘T‘, ‘C‘, ‘G‘]和[‘T‘, ‘A‘, ‘G‘, ‘C‘],利用下标找到配对碱基。
split()
割字符串为单个字符数组
map()生成新的数组
function pair(str) { const arr1 = [‘A‘, ‘T‘, ‘C‘, ‘G‘]; const arr2 = [‘T‘, ‘A‘, ‘G‘, ‘C‘]; return str.split(‘‘).map((val)=>{ return [val, arr2[arr1.indexOf(val)]]; }); }
原文:https://www.cnblogs.com/phpdancer/p/10761265.html