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)数 ...
随机推荐
- TJOI2018Party
题目描述 小豆参加了\(NOI\)的游园会,会场上每完成一个项目就会获得一个奖章,奖章 只会是\(N\), \(O\), \(I\)的字样.在会场上他收集到了\(K\)个奖章组成的串. 兑奖规则是奖章 ...
- ZOJ 3949 Edge to the Root( 树形dp)
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3949 题解:树dp真的很直觉,或者说dp真的很直觉.就上周末比赛时其实前一 ...
- Linux系统网络编程中TCP通讯socket--send导致进程被关闭
https://blog.csdn.net/dsanmux/article/details/52083403 https://blog.csdn.net/u011425939/article/deta ...
- ECS集群管理docker
1. create ECR Repositories on AWS a. local server need install git/docker/awscli b. config aws: use ...
- 各种类型文件的Content-Type
各种类型文件的Content-Type 2017年11月27日 10:00:56 thebigdipperbdx 阅读数:7360 版权声明:本文为博主原创文章,未经博主允许不得转载. https ...
- LNMP组合环境
Mysql----二进制安装: 下载rpm包 创建MySQL用户: useradd -s /sbin/nologin mysql -M 这里遇到无法创建用户,提示:useradd: group mys ...
- python和Java的几种容器比较
python里面有几种常用的容器用来存放数据 1.list 列表,在python中没有数据类型,所以可以在列表中存放各种类型的数据,比如把Java里面的整型和字符串放在一个容器里面如下所示 list ...
- Java虚拟机运行时内存区域简析
figure:first-child { margin-top: -20px; } #write ol, #write ul { position: relative; } img { max-wid ...
- mysql5.x安装脚本
直接贴出来: #!/bin/bash #linux安装mysql服务分两种安装方法: #①源码安装,优点是安装包比较小,只有十多M,缺点是安装依赖的库多,安装编译时间长,安装步骤复杂容易出错: #②使 ...
- Maven - 本地仓库(.m2) vs. 远程仓库(联网)
转载自:https://www.cnblogs.com/shuaiandjun/p/7604619.html 什么是Maven仓库在不用Maven的时候,比如说以前我们用Ant构建项目,在项目目录下, ...