在学习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中级算法(上)的更多相关文章

  1. FCC编程题之中级算法篇(上)

    介绍 FCC: 全称为freeCodeCamp,是一个非盈利性的.面向全世界的编程练习网站.这次的算法题来源于FCC的中级算法题. FCC中级算法篇共分为(上).(中).(下)三篇.每篇各介绍7道算法 ...

  2. FCC编程题之中级算法篇(下)

    介绍 本篇是"FCC编程题之中级算法篇"系列的最后一篇 这期完结后,下期开始写高级算法,每篇一题 目录 1. Smallest Common Multiple 2. Finders ...

  3. FCC编程题之中级算法篇(中)

    介绍 接着上次的中级算法题 目录 1. Missing letters 2. Boo who 3. Sorted Union 4. Convert HTML Entities 5. Spinal Ta ...

  4. FreeCodeCamp 中级算法(个人向)

    freecodecamp 中级算法地址戳这里 Sum All Numbers in a Range 我们会传递给你一个包含两个数字的数组.返回这两个数字和它们之间所有数字的和. function su ...

  5. 一步一步写算法(之prim算法 上)

    原文:一步一步写算法(之prim算法 上) [ 声明:版权所有,欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com] 前面我们讨论了图的创建.添加.删除和保存等问题.今 ...

  6. fcc的中级算法题

    核心提示:这是网上开源编程学习项目FCC的javascript中级编程题(Intermediate Algorithm Scripting(50 hours)),一共20题.建议时间是50个小时,对于 ...

  7. Java面试题——中级(上)

    List和Set比较,各自的子类比较 对比一:Arraylist与LinkedList的比较 1.ArrayList是实现了基于动态数组的数据结构,因为地址连续,一旦数据存储好了,查询操作效率会比较高 ...

  8. <转载> 从算法上解读自动驾驶是如何实现的?

     科技新闻小鹏汽车2016-03-28 10:42 [摘要]车辆路径规划问题中路网模型.路径规划算法和交通信息的智能预测为关键点. 由于驾驶员的驾驶工作繁重,同时随着汽车拥有量的增加,非职业驾驶员的数 ...

  9. leetcode探索中级算法

    leetcode探索中级答案汇总: https://leetcode-cn.com/explore/interview/card/top-interview-questions-medium/ 1)数 ...

随机推荐

  1. python 自动发现Java端口

    python 自动发现Java端口 #!/usr/bin/env python #encoding: utf8 import subprocess try: import json except Im ...

  2. Linux haproxy基础

    代理作用 web缓存,提供缓存功能,可以加速响应过程. 反向代理,可以隐藏后端服务器 内容路由,可把不同内容类型的请求转发至特定服务器, 转码器,与客户端通信,由于带宽限制,可将报文转码压缩:与后端服 ...

  3. I2C(二) linux2.6

    目录 I2C(二) linux2.6 总线驱动 关键结构 入口 i2c_add_adapter 硬件操作 设备驱动 入口 注册 attach_adapter eeprom_detect i2c_att ...

  4. finalize()与PhantomReference学习笔记

    众所周知,Java语言提供了自动垃圾回收机制,使得程序员不用考虑自己释放不再使用的内存.既然回收内存的活都让Java自己干了,程序员在这方面能干的事情就不多了.尽管如此,Java也提供了一些让程序员对 ...

  5. 一个Ajax读数据并使用IScroll显示辅助类

    花了2天时间对iscroll进行了一些封装,方便进行ajax读取数据和显示 1.IScroll直接使用的话还是挺麻烦的,特别是牵涉到分页加载动态加载数据时,以下是核心实现代码. 2.Loading提示 ...

  6. ASP.Net获取Aras连接,并获取Innovator实例

    首先需要在自己的项目bin目录下引入Aras的dll(../Aras\Innovator\Innovator\Server\bin). 注意:在引入Aras的dll时.需要注意自己的操作系统的位数.因 ...

  7. 使用onblur+alert+focus导致的死循环解决

    <input type="text" id="loginName" onblur="checkLoginName()"/> fu ...

  8. docker安装elasticsearch

    docker search elasticsearch 选择一个版本,拉取镜像 docker pull elasticsearch: 查看镜像 docker images 通过镜像,启动一个容器,并将 ...

  9. windows 下的 Rsync 同步

    整理一下 windows 下的 rsync 文件同步. Rsync下载地址: 链接:https://pan.baidu.com/s/1nL0Ee_u76ytWKUFMeiKDIw 提取码:52in 一 ...

  10. mac air中编译安装swoole

    本机php版本, 我的7.3.0 1 下载swoole源码 https://github.com/swoole/swoole-src/releases 我下载的版本是swoole-src-4.3.3. ...