FreeCodeCamp初級演算法部分學習

来源:https://www.cnblogs.com/yexiao-windy/archive/2019/02/25/10430101.html
-Advertisement-
Play Games

Reverse a String 翻轉字元串 先把字元串轉化成數組,再藉助數組的reverse方法翻轉數組順序,最後把數組轉化成字元串。 你的結果必須得是一個字元串 當你完成不了挑戰的時候,記得開大招'Read-Search-Ask'。 這是一些對你有幫助的資源: Global String Obj ...


 

Reverse a String 

翻轉字元串

先把字元串轉化成數組,再藉助數組的reverse方法翻轉數組順序,最後把數組轉化成字元串。

你的結果必須得是一個字元串

當你完成不了挑戰的時候,記得開大招'Read-Search-Ask'。

這是一些對你有幫助的資源:

 1  function reverseString(str) {
 2   // 請把你的代碼寫在這裡
 3   var val=[];
 4   val=str.split('');
 5   str=(val.reverse()).join('');
 6   return str;
 7 }
 8 
 9 
10 reverseString("hello");

Factorialize a Number 

計算一個整數的階乘

如果用字母n來代表一個整數,階乘代表著所有小於或等於n的整數的乘積。

階乘通常簡寫成 n!

例如: 5! = 1 * 2 * 3 * 4 * 5 = 120

當你完成不了挑戰的時候,記得開大招'Read-Search-Ask'。

這是一些對你有幫助的資源:

 1 function factorialize(num) {
 2   // 請把你的代碼寫在這裡
 3   if(num === 0)
 4     return 1;
 5   else if (num == 1)
 6     return num;
 7   else
 8     return num*factorialize(num-1); //這裡採用了遞歸的方法
 9 }
10 
11 
12 factorialize(0);

 

Check for Palindromes 

檢查迴文字元串

如果給定的字元串是迴文,返回true,反之,返回false

如果一個字元串忽略標點符號、大小寫和空格,正著讀和反著讀一模一樣,那麼這個字元串就是palindrome(迴文)。

註意你需要去掉字元串多餘的標點符號和空格,然後把字元串轉化成小寫來驗證此字元串是否為迴文。

函數參數的值可以為"racecar""RaceCar""race CAR"

當你完成不了挑戰的時候,記得開大招'Read-Search-Ask'。

這是一些對你有幫助的資源:

 1 function palindrome(str) {
 2   // 請把你的代碼寫在這裡
 3   var val=[];
 4   var str1,str2;
 5   val=str.replace(/[^a-zA-Z0-9]/g,'').toLowerCase().split('');
 6   str1=val.join("");
 7   str2=val.reverse.join('');
 8   if (str1===str2)
 9      return true;
10   else
11     return false;
12 }
13 
14 
15 palindrome("eye");

 

Find the Longest Word in a String 

找出最長單詞

在句子中找出最長的單詞,並返回它的長度。

函數的返回值應該是一個數字。

當你完成不了挑戰的時候,記得開大招'Read-Search-Ask'。

這是一些對你有幫助的資源:

 1 function findLongestWord(str) {
 2   // 請把你的代碼寫在這裡
 3   var val=str.split(' ');
 4   var j=0;
 5   for(var i=1;i<val.length;i++){
 6     if(val[j].length<val[i].length)
 7       j=i;
 8   }
 9   
10   return val[j].length;
11 }
12 
13 
14 findLongestWord("The quick brown fox jumped over the lazy dog");

 

Title Case a Sentence 

句中單詞首字母大寫

確保字元串的每個單詞首字母都大寫,其餘部分小寫。

像'the'和'of'這樣的連接符同理。

當你完成不了挑戰的時候,記得開大招'Read-Search-Ask'。

這是一些對你有幫助的資源:

 1 function titleCase(str) {
 2   // 請把你的代碼寫在這裡
 3   var val=str.toLowerCase().split(' ');
 4   for(var i=0;i<val.length;i++){
 5       var val2=val[i].split('');  //不要把分開裡面也當成數組,那是字元串
 6       val2[0]=val2[0].toUpperCase();
 7       val[i]=val2.join("");
 8     }
 9     
10   str=val.join(' ');
11   return str;
12 }
13 
14 
15 /* 高人寫法!
16 function titleCase(str) {
17 
18 
19   var newstr=str.toLowerCase().split(" ").map(function(item){
20     //一、toLowerCase()全部轉化為小寫; 
21     //二、split()拆分字元串為數組; 
22     //三、map()方法返回一個新數組;
23     return item[0].toString().toUpperCase()+item.slice(1);
24     //獲取數組的第一個字母,轉化為大寫
25     //然後加上後面的小寫內容(slice()方法獲取範圍內容,1表示從第二個字母開始)
26   }).join(" ");
27    //join()方法組合成字元串
28   return newstr;
29 }
30 */
31 
32 
33 titleCase("I'm a little tea pot")

Return Largest Numbers in Arrays 

找出多個數組中的最大數

右邊大數組中包含了4個小數組,分別找到每個小數組中的最大值,然後把它們串聯起來,形成一個新數組。

提示:你可以用for迴圈來迭代數組,並通過arr[i]的方式來訪問數組的每個元素。

當你完成不了挑戰的時候,記得開大招'Read-Search-Ask'。

這是一些對你有幫助的資源:

 1 function largestOfFour(arr) {
 2   // 請把你的代碼寫在這裡
 3   var temp=[];
 4   for(var i=0;i<arr.length;i++){
 5     var val=arr[i][0];
 6     for(var j=1;j<arr[i].length;j++){
 7       if(val<arr[i][j]) val=arr[i][j]
 8     }
 9     temp.push(val)
10   }
11   return temp;
12 }
13 
14 
15 largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]);

 

Confirm the Ending 

檢查字元串結尾

判斷一個字元串(str)是否以指定的字元串(target)結尾。

如果是,返回true;如果不是,返回false。

當你完成不了挑戰的時候,記得開大招'Read-Search-Ask'。

這是一些對你有幫助的資源:

 1 function confirmEnding(str, target) {
 2   // 請把你的代碼寫在這裡
 3   str=str.split(' ').join('').substr(-target.length);
 4   if(str==target)
 5     return true;
 6   else
 7     return false;
 8 }
 9 
10 
11 confirmEnding("Bastian", "n");

 

str.substr(start[, length])
參數:
start
開始提取字元的位置,如果為負值,則從字元串的尾部開始算起的位置。
length
可選,提取的字元數,如果省略了該參數,那麼返回從開始位置到結尾的字元串。

Repeat a string repeat a string 

重覆輸出字元串

(重要的事情說3遍)

重覆一個指定的字元串 num次,如果num是一個負數則返回一個空字元串。

當你完成不了挑戰的時候,記得開大招'Read-Search-Ask'。

這是一些對你有幫助的資源:

 1 function repeat(str, num) {
 2   // 請把你的代碼寫在這裡
 3   var k='';
 4   if(num<0) return "";
 5   else{
 6     for(var i=0;i<num;i++)
 7       k+=str;
 8     return k;}
 9 }
10 
11 
12 repeat("abc", 3);

 

Truncate a string 

截斷字元串

(用瑞茲來截斷對面的退路)

如果字元串的長度比指定的參數num長,則把多餘的部分用...來表示。

切記,插入到字元串尾部的三個點號也會計入字元串的長度。

但是,如果指定的參數num小於或等於3,則添加的三個點號不會計入字元串的長度。

當你完成不了挑戰的時候,記得開大招'Read-Search-Ask'。

這是一些對你有幫助的資源:

 1 function truncate(str, num) {
 2   // 請把你的代碼寫在這裡
 3    var str1="";
 4   if(num<=3)
 5     str1=str.slice(0,num)+"...";
 6   else if(num>=str.length){
 7     str1=str;
 8   }else{
 9     str1=str.slice(0,num-3)+"...";
10   }
11   return str1;
12 }
13 
14 
15 truncate("A-tisket a-tasket A green and yellow basket", 11);

 

Chunky Monkey 

猴子吃香蕉, 分割數組

(猴子吃香蕉可是掰成好幾段來吃哦)

把一個數組arr按照指定的數組大小size分割成若幹個數組塊。

例如:chunk([1,2,3,4],2)=[[1,2],[3,4]];

chunk([1,2,3,4,5],2)=[[1,2],[3,4],[5]];

當你完成不了挑戰的時候,記得開大招'Read-Search-Ask'。

這是一些對你有幫助的資源:

 1 function chunk(arr, size) {
 2   // 請把你的代碼寫在這裡
 3   var arr1=[];
 4   var start=0,end=size;
 5   for(var i=0;i<size+1;i++){ //多一次迴圈,處理分割兩次得3塊的情況
 6     if(start>=arr.length)
 7       break;  //已經分配結束
 8     else if(end>=arr.length)
 9       arr1.push(arr.slice(start)); //最後一次不夠數或剛好夠數
10     else {arr1.push(arr.slice(start,end));}
11     start+=size;
12     end+=size;
13   }
14   return arr1;
15 }
16 
17 
18 chunk([0, 1, 2, 3, 4, 5], 2);

 

Slasher Flick

截斷數組

返回一個數組被截斷n個元素後還剩餘的元素,截斷從索引0開始。

當你完成不了挑戰的時候,記得開大招'Read-Search-Ask'。

這是一些對你有幫助的資源:

 1 function slasher(arr, howMany) {
 2   // 請把你的代碼寫在這裡
 3   var val=[];
 4   if(howMany>=arr.length)
 5     return val;
 6   else 
 7     //return arr.slice(howMany); //解法一
 8     return arr.splice(howMany);  //解法二
 9     
10 }
11 
12 
13 slasher([1, 2, 3], 2);

 

解法一:

思路:首先準確理解slice()的用法,slice不會改變原數組,會生成一個新數組,slice(begin,end),這裡howMany是begin,end被省略,則會一直提取到原數組末尾。

解法二:

思路:詳細理解splice()的用法,splice會直接對數組進行修改,返回的是由被刪除元素組成的一個數組,則原數組中就沒有了被刪除的元素。

Mutations

比較字元串

(蛤蟆可以吃隊友,也可以吃對手)

如果數組第一個字元串元素包含了第二個字元串元素的所有字元,函數返回true。

舉例,["hello", "Hello"]應該返回true,因為在忽略大小寫的情況下,第二個字元串的所有字元都可以在第一個字元串找到。

["hello", "hey"]應該返回false,因為字元串"hello"並不包含字元"y"。

["Alien", "line"]應該返回true,因為"line"中所有字元都可以在"Alien"找到。

當你完成不了挑戰的時候,記得開大招'Read-Search-Ask'。

這是一些對你有幫助的資源:

 1 function mutation(arr) {
 2   // 請把你的代碼寫在這裡
 3   arr[0]=arr[0].toLowerCase();          //將所有字元串轉換為小寫
 4   arr[1]=arr[1].toLowerCase();
 5   for(var i=0; i<arr[1].length; i++)   //對要查的子鏈進行遍歷
 6     //檢測第二個字元串中的字元在第一個數組中是否存在
 7     if(arr[0].indexOf(arr[1][i])==-1){
 8       return false;
 9     }
10   return true;                          //迴圈未輸出false即輸出true
11 }
12 mutation(["hello", "hey"]);

 

Falsy Bouncer

過濾數組假值

(真假美猴王)

刪除數組中的所有假值。

在JavaScript中,假值有falsenull0""undefinedNaN

當你完成不了挑戰的時候,記得開大招'Read-Search-Ask'。

這是一些對你有幫助的資源:

 1 function bouncer(arr) {
 2   // 請把你的代碼寫在這裡
 3  return arr.filter(function(s){
 4    return Boolean(s);
 5  });
 6 //解法二: return arr.filter(Boolean);
 7 }
 8 
 9 
10 bouncer([7, "ate", "", false, 9]);

 

 

思路:用  Boolean() 函數進行類型轉換。如果它的參數是 0、-0、null、undefined、false、NaN、"",生成的Boolean對象的值會為false,也就是“假值”。

var new_array = arr.filter(callback(element[, index[, array]])[, thisArg])
filter 為數組中的每個元素調用一次 callback 函數,並利用所有使得 callback 返回 true 或 等價於 true 的值 的元素創建一個新數組。callback 只會在已經賦值的索引上被調用,對於那些已經被刪除或者從未被賦值的索引不會被調用。那些沒有通過 callback 測試的元素會被跳過,不會被包含在新數組中。

 

 JavaScript中,Truthy(真值)指的是在)布爾值上下文中轉換後的值為真的值.所有值都是真值,除非它們被定義為falsy(即除了)false0""nullundefined 和 NaN外)。
JavaScript在布爾值上下文中使用強制類型轉換(coercion)。
JavaScript中的真值示例如下(將被轉換為trueif後的代碼段將被執行):
if(true) if({}) if([]) if(42) if("foo") if(new Date())
if(-42) if(3.14) if(-3.14) if(Infinity) if(-Infinity)

Seek and Destroy

摧毀數組

金克斯的迫擊炮!

實現一個摧毀(destroyer)函數,第一個參數是待摧毀的數組,其餘的參數是待摧毀的值。

當你完成不了挑戰的時候,記得開大招'Read-Search-Ask'。

這是一些對你有幫助的資源:

 

 1 function destroyer(arr) {
 2   // 請把你的代碼寫在這裡
 3       var argumentsArr = [];//創立摧毀值數組
 4       for(var i=0;i<arguments.length-1;i++){
 5           argumentsArr.push(arguments[i+1]);
 6           }
 7       arr = arr.filter(function(element){
 8           //遍歷arr所有值,判斷是否在摧毀值數組中,無則返回-1,為true,返回通過的元素
 9             return argumentsArr.indexOf(element) == -1;
10           });
11       return arr;
12 destroyer([1, 2, 3, 1, 2, 3], 2, 3);

 

簡單總結filter方法:

1,遍曆數組中的元素

2,函數測試,檢查return是否等於true;

3,返回一個包含所有通過測試的元素的新數組。

 

arr.filter方法本身自帶迴圈,它自己會使用我們給定的函數來測試數組中的所有元素,並創建(即返回)一個包含所有通過測試的元素的新數組(註意它並沒有改變原數組)。不能嵌套入for迴圈中!

 

錯誤寫法:

1 for(i=0;i<argumentsArr.length;i++ ){    arr.filter(function(argumentsArr[i]){
2                    return arr.indexOf(argumentsArr[i]) == -1;});
3 }

 

Where do I belong

數組排序並找出元素索引

我身在何處?

先給數組排序,然後找到指定的值在數組的位置,最後返回位置對應的索引。

舉例:where([1,2,3,4], 1.5) 應該返回 1。因為1.5插入到數組[1,2,3,4]後變成[1,1.5,2,3,4],而1.5對應的索引值就是1

同理,where([20,3,5], 19) 應該返回 2。因為數組會先排序為 [3,5,20]19插入到數組[3,5,20]後變成[3,5,19,20],而19對應的索引值就是2

當你完成不了挑戰的時候,記得開大招'Read-Search-Ask'。

這是一些對你有幫助的資源:

 1 function where(arr, num) {
 2   // 請把你的代碼寫在這裡
 3   arr.push(num);
 4   arr.sort(function(a,b){
 5     return a-b;
 6   });//升序排列
 7   return arr.indexOf(num);
 8 }
 9 
10 
11 where([40, 60], 50);

 

如果指明瞭 compareFunction ,那麼數組會按照調用該函數的返回值排序。即 a 和 b 是兩個將要被比較的元素:
1、如果 compareFunction(a, b) 小於 0 ,那麼 a 會被排列到 b 之前;
2、如果 compareFunction(a, b) 等於 0 , a 和 b 的相對位置不變。備註: ECMAScript 標準並不保證這一行為,而且也不是所有瀏覽器都會遵守(例如 Mozilla 在 2003 年之前的版本);
3、如果 compareFunction(a, b) 大於 0 , b 會被排列到 a 之前。
compareFunction(a, b) 必須總是對相同的輸入返回相同的比較結果,否則排序的結果將是不確定的。

規則

排序

   

a>b

a<b

return > 0

b、a

升序

a-b>0

a-b<0

return < 0

a、b

降序

b-a<0

b-a>0

簡化一下(剛好相反):

  • a-b輸出從小到大排序
  • b-a輸出從大到小排序

Caesars Cipher

凱撒密碼

(讓上帝的歸上帝,凱撒的歸凱撒)

下麵我們來介紹風靡全球的凱撒密碼Caesar cipher,又叫移位密碼。

移位密碼也就是密碼中的字母會按照指定的數量來做移位。

一個常見的案例就是ROT13密碼,字母會移位13個位置。由'A' ↔ 'N', 'B' ↔ 'O',以此類推。

寫一個ROT13函數,實現輸入加密字元串,輸出解密字元串。

所有的字母都是大寫,不要轉化任何非字母形式的字元(例如:空格,標點符號),遇到這些特殊字元,跳過它們。

當你完成不了挑戰的時候,記得開大招'Read-Search-Ask'。

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • var MyModules = (function Manager(){ // 保存方法 var modules = {}; // 傳方法名,參數,方法 方法的參數由deps提供 function define(name, deps, impl) { // 將模塊中的方法給deps 作為下一個函數的... ...
  • 使用vscode開發vue項目的時候,從遠端拉下一個新的項目後,安裝完依賴後跑起項目時,發現直接報了一堆語法錯誤:包括換行、空格、單雙引號、分號等各種格式問題 ...
  • 葵花寶典: 【1】相鄰的2個margin值會疊加在一起。 【2】子元素設定的margin值會影響父元素。 在標準瀏覽器下(FireFox,Chrome,Opera,Safari)會有問題。IE下一般表現良好。 原因是:一個盒子如果沒有上補白(padding-top)和上邊框(border-top)那 ...
  • 主頁劃 5 個組件,即 header icon swiper recommend weekend 一. header區域開發 1. 安裝 stylus npm install stylus --save cnpm install stylus-loader --save 2. 編寫樣式 3. 添加i ...
  • 本文由雲+社區發表 作者:廖彩明 在從事前端開發過程中,瀏覽器作為最重要的開發環境,瀏覽器基礎是是前端開發人員必須掌握的基礎知識點,它貫穿著前端的整個網路體系。對瀏覽器原理的瞭解,決定著編寫前端代碼性能的上限。瀏覽器作為JS的運行環境,學習總結下現代瀏覽器的相關知識 前言 經常聽說瀏覽器內核,瀏覽器 ...
  • 對於如此多的不同情形,可以總結如下:- 在不賦值的情形下,在小括弧中的函數或者函數表達式,被阻止聲明為一個全局的變數,同時其內部是可執行的 ...
  • 繼上篇 "文章" 介紹了Webpack的基本概念,完整流程,以及打包過程中廣播的一些事件的作用,這篇文章主要講生成的chunk文件如何輸出成具體的文件。分同步和非同步兩種情況來分析輸出的文件 。 模塊文件show.js 同步載入 生成的bundle文件 非同步載入 經webpack打包會生成兩個文件0. ...
  • 錯誤消息如圖: 如果你看到此錯誤消息,則說明 v-for 指令的 key值 重覆了,只需修改你的 key值 讓其不會重覆即可。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...