FCC中级算法(上)
在学习FCC中级算法这一块,自己遇到了很多问题,通过RSA也慢慢把问题解决了,发现每一个问题都会有很多的解决思路,因此把自己想到的一些思路记录到这里。
1. Sum All Numbers in a Range
我们会传递给你一个包含两个数字的数组。返回这两个数字和它们之间所有数字的和。
思路1:定位最大和最小的值,进行累和相加,用到函数:Math.max(),Math.min(),Function.apply()
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;
}
思路2:使用数学的等差公式进行计算。
Sn = n * (a1 + an) / 2 //等差公式
function sumAll(arr) {
return (arr[0] + arr[1]) * (Math.abs(arr[1] - arr[0]) + 1) / 2;
}
2. Diff Two Arrays
比较两个数组,然后返回一个新数组,该数组的元素为两个给定数组中所有独有的数组元素。
思路1:过滤掉两个数组不符合要求的元素,合并两个新的元素。用到函数:Array.filter(),Array.concat(),Array.indexOf()
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);
}
思路2:用循环找到符合的元素,将所有满足的元素放入新的数组中。用到函数:Array.indexOf(),Array.push()
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;
}
3. Roman Numberal Converter
将给定的数字转换成罗马数字。

思路:根据对照表,建立两个对应的数组,通过待转换的数字不断的减去比自己小一级的数字,找到对应的罗马数字,进行字符串拼接。
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;
}
4. Where art thou
写一个 function,它遍历一个对象数组(第一个参数)并返回一个包含相匹配的属性-值对(第二个参数)的所有对象的数组。
思路:获取第二个参数的所有key,遍历第一个参数中的所有对象,保留符合的对象。用到函数:Object.keys(),Object.hasOwnProperty(),Array.filter
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;
}
5.Search and Replace
使用给定的参数对句子执行一次查找和替换,然后返回新句子。
第一个参数是将要对其执行查找和替换的句子。
第二个参数是将被替换掉的单词(替换前的单词)。
第三个参数用于替换第二个参数(替换后的单词)。
思路:先检查被替换的单词第一个字母是否大写,如果是大写,把用于替换的单词首字母改成大写,然后替换进原字符串中。用到函数:String.toUpperCase(),String.slice(),String.replace()
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;
}
6.Pig Latin
把指定的字符串翻译成 pig latin。
Pig Latin 把一个英文单词的第一个辅音或辅音丛(consonant cluster)移到词尾,然后加上后缀 "ay"。
如果单词以元音开始,你只需要在词尾添加 "way" 就可以了。
思路1:先判断第一个是否为元音,是的话直接返回目标字符串,否则遍历字符串,首字母不断后移,直到碰到元音字母,返回目标字符串。
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;
}
思路2:找到第一原因字母的下标,判断是否为第一个,返回对应的字符串。用到函数:Array.indexOf(),String.slice(),String.substr()
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";
}
7.DNA Pairing
DNA 链缺少配对的碱基。依据每一个碱基,为其找到配对的碱基,然后将结果作为第二个数组返回。
Base pairs(碱基对) 是一对 AT 和 CG,为给定的字母匹配缺失的碱基。
在每一个数组中将给定的字母作为第一个碱基返回。
思路:
碱基对一共只有4种情况,根据给出的碱基,返回对应的数组,追加到新数组中。
用到函数:String.split(),Array.push()
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;
}
思路2:
创建两个数组,分别存储['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)]];
});
}
FCC中级算法(上)的更多相关文章
- FCC编程题之中级算法篇(上)
介绍 FCC: 全称为freeCodeCamp,是一个非盈利性的.面向全世界的编程练习网站.这次的算法题来源于FCC的中级算法题. FCC中级算法篇共分为(上).(中).(下)三篇.每篇各介绍7道算法 ...
- FCC编程题之中级算法篇(下)
介绍 本篇是"FCC编程题之中级算法篇"系列的最后一篇 这期完结后,下期开始写高级算法,每篇一题 目录 1. Smallest Common Multiple 2. Finders ...
- FCC编程题之中级算法篇(中)
介绍 接着上次的中级算法题 目录 1. Missing letters 2. Boo who 3. Sorted Union 4. Convert HTML Entities 5. Spinal Ta ...
- FreeCodeCamp 中级算法(个人向)
freecodecamp 中级算法地址戳这里 Sum All Numbers in a Range 我们会传递给你一个包含两个数字的数组.返回这两个数字和它们之间所有数字的和. function su ...
- 一步一步写算法(之prim算法 上)
原文:一步一步写算法(之prim算法 上) [ 声明:版权所有,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] 前面我们讨论了图的创建.添加.删除和保存等问题.今 ...
- fcc的中级算法题
核心提示:这是网上开源编程学习项目FCC的javascript中级编程题(Intermediate Algorithm Scripting(50 hours)),一共20题.建议时间是50个小时,对于 ...
- Java面试题——中级(上)
List和Set比较,各自的子类比较 对比一:Arraylist与LinkedList的比较 1.ArrayList是实现了基于动态数组的数据结构,因为地址连续,一旦数据存储好了,查询操作效率会比较高 ...
- <转载> 从算法上解读自动驾驶是如何实现的?
科技新闻小鹏汽车2016-03-28 10:42 [摘要]车辆路径规划问题中路网模型.路径规划算法和交通信息的智能预测为关键点. 由于驾驶员的驾驶工作繁重,同时随着汽车拥有量的增加,非职业驾驶员的数 ...
- leetcode探索中级算法
leetcode探索中级答案汇总: https://leetcode-cn.com/explore/interview/card/top-interview-questions-medium/ 1)数 ...
随机推荐
- 第六周博客作业<西北师范大学|李晓婷>
1.助教博客链接:https://home.cnblogs.com/u/lxt-/ 2.作业要求链接:https://www.cnblogs.com/nwnu-daizh/p/10569690.htm ...
- Windows下U盘管理程序
一个操作系统的作业,生成的程序需要使用管理员权限运行,参考了很多网上的代码,如果打开错误,请修改字符集为使用多字节字符集,并且调整为release模式. 作业的内容如下: 任务操作系统API应用体验与 ...
- Java基础--异常处理
1.异常的传统处理方式 缺点: [1] 通过判断影响执行效率. [2] 判断逻辑和业务逻辑交织在一起,可维护性很差. public class Test01 { public static void ...
- 将图片转为base64
DEMO: <input type="file" id="file" multiple="multiple"> <div ...
- Dynamics CRM 日常使用JS整理(二)
BPF(Business Process Flow)相关的JS 为Stage添加changed或者selected事件: function fnOnLoad() { Xrm.Page.data.pro ...
- 记一次线上Java程序导致服务器CPU占用率过高的问题排除过程
博文转至:http://www.jianshu.com/p/3667157d63bb,转本博文的目的就是需要的时候以防忘记 1.故障现象 客服同事反馈平台系统运行缓慢,网页卡顿严重,多次重启系统后问题 ...
- .net 笔试题目
2.1.using关键字有什么用?什么是IDisposable? using可以声明namespace的引入,还可以实现非托管资源的释放,实现了IDisposiable的类在using中创建,usin ...
- Intellij IDEA 修改jsp 不能实时更新
Intellij IDEA 修改jsp 不能实时更新 1. 首先,output要指定到项目的webapp下,这样应该就可以实时更新了 2. 我的问题是这样设置之后,也不可以,原来是可以的,重装系统之后 ...
- robotframework环境安装
1.安装 robotframework 执行命令 pip install robotframework 2.安装seleniumlibrary 执行命令 pip install --upgrade r ...
- WebRTC Precompiled 使用
最近研究webrtc native code,但源码太大(10GB以上)又需要FQ,就找了个预编译的版本https://sourcey.com/precompiled-webrtc-libraries ...