分享一个初级脚本算法实例
之前偶然看到了w3c上的编程挑战题,就像拿来试试手,先做的是初级脚本算法,总体不难,如果有更好的方法,希望能一起交流!
1、翻转字符串
先把字符串转化成数组,再借助数组的reverse方法翻转数组顺序,最后把数组转化成字符串。
function reverseString(str) {var str2 = '';for(var i=str.length-1;i>=0;i--){ str2 += str[i]; }return str2; }function reverseString(str){var strArray = str.split(''); strArray.reverse(); str = strArray.join('');return str }
2、计算一个整数的阶乘
如果用字母n来代表一个整数,阶乘代表着所有小于或等于n的整数的乘积。
function factorialize(num) {var sum = 1;for(var i=num;i>0;i--){ sum *= i; } console.log(sum);return sum; }function factorialize(num) {if(num ==1){return 1; }else{return arguments.callee(num-1)*num; } }
3、回文算法
如果给定的字符串是回文,返回true
,反之,返回false
。
如果一个字符串忽略标点符号、大小写和空格,正着读和反着读一模一样,那么这个字符串就是(回文)。
注意你需要去掉字符串多余的标点符号和空格,然后把字符串转化成小写来验证此字符串是否为回文。
function palindrome(str) {var arr = []; str = str.toLowerCase(); for(var i=0;i<str.length;i++){// 在小写字母的Unicode的范围内或者在数字的Unicode范围内if((str.charCodeAt(i)<=122 && str.charCodeAt(i)>=97) || (str.charCodeAt(i)<=57 && str.charCodeAt(i)>=48)){ arr.push(str[i]); } }//只需要判断数组一半的次数就全部比较完了,不必再浪费时间了for(var i=0;i<Math.ceil(arr.length/2);i++) {if(arr[i] !== arr[arr.length-i-1]){return false; } }return true; }// 需要手动添加特殊字符function palindrome(str){var str1,str2; str = str.toLowerCase(); str = str.replace(/[\ |\~|\`|\!|\@|\#|\$|\%|\^|\&|\*|\(|\)|\-|\_|\+|\=|\||\\|\[|\]|\{|\}|\;|\:|\"|\'|\,|\<|\.|\>|\/|\?]/g,""); str1 = str.split(''); str1.reverse(); str2 = str1.join('');if(str === str2){return true}else{return false; } }
4、寻找最长的单词算法
找到提供的句子中最长的单词,并计算它的长度。
函数的返回值应该是一个数字。
// 利用charCodeAt()方法判断是不是一个单词,并记录单词长度,最后获得最长的单词长度function findLongestWord(str) {var num = 0, max = 0;for (var i = 0; i < str.length; i++) {if (str.charCodeAt(i) !== 32) { num++; } else {// 注意:如果最后一个字母不是空格,不会比较最后一个单词的长度max = num > max ? num : max; num = 0; } }// 比较最后一个单词的长度max = num > max ? num : max;return max; }// 利用split()方法将字符串分成每个单词组成的数组,取得其中最长的长度function findLongestWord(str){ var max = 0; var arr = str.split(' '); for(var i=0;i<arr.length;i++){ max = arr[i].length>max?arr[i].length:max; } return max; }
5、设置首字母大写算法
确保字符串的每个单词首字母都大写,其余部分小写。
像'the'和'of'这样的连接符同理。
//将字符串用split()方法转为数组,并用数组中的每个项的首字母的大写和这个项剩余的字符拼接,最后转为字符串function titleCase(str) {var arr,upChar; str = str.toLowerCase(); arr = str.split(' '); for(var i=0;i<arr.length;i++){ upChar = arr[i][0].toUpperCase() ; arr[i] = upChar + arr[i].slice(1); } arr = arr.join(' ');return arr; }function titleCase(str){var upChar, toUper = false;for(var i=0;i<str.length;i++){if((str.charCodeAt(i) == 32)){ toUper = true; }else if(toUper){ upChar= str[i].toUpperCase(); console.log(upChar) console.log(str[i]); str[i] = upChar; toUper = false; } }return str; }
6、寻找数组中的最大值算法
右边大数组中包含了4个小数组,分别找到每个小数组中的最大值,然后把它们串联起来,形成一个新数组。
function largestOfFour(arr) {var max = 0, result = [];for(var i=0;i<arr.length;i++){for(var j=0;j<arr[i].length;j++){var n = arr[i][j]; max = n>max?n:max; } result.push(max); max = 0; }return result; }
7、确认末尾字符算法
检查一个字符串(str
)是否以指定的字符串(target
)结尾。
如果是,返回true;如果不是,返回false。
// 从后开始比较function confirmEnding(str, target) {for (var i = 0; i < target.length; i++) {if (str[str.length - 1 - i] != target[target.length - 1 - i]) {return false; } }return true; }
8、重复操作算法
重要的事情说3遍!
重复一个指定的字符串 num
次,如果num
是一个负数则返回一个空字符串。
function repeat(str, num) {var result = '';if(num<0){return ''; }else{for(var i=0;i<num;i++){ result += str; } }return result; }
9、字符串截取算法
用瑞兹来截断对面的退路!
截断一个字符串!
如果字符串的长度比指定的参数num
长,则把多余的部分用...
来表示。
切记,插入到字符串尾部的三个点号也会计入字符串的长度。
但是,如果指定的参数num
小于或等于3,则添加的三个点号不会计入字符串的长度。
function truncate(str, num) {var result = '';var strArr = str.split('');if(num<=3){ result = str.slice(0,num) +'...'; }else if(str.length>num){ result = str.slice(0,num-3) + '...'; }else{ result = str; }return result; }
10、数组分割算法
猴子吃香蕉可是掰成好几段来吃哦!
把一个数组arr
按照指定的数组大小size
分割成若干个数组块。
function chunk(arr, size) {var result = [];var a = [];for(var i=0;i<arr.length;i++){ a.push(arr[i]);if( ((i+1)%size == 0) || (i == arr.length-1)){ result.push(a); a = []; } }return result; }
11、数组截断算法
打不死的小强!
返回一个数组被截断n
个元素后还剩余的元素,截断从索引0开始。
function slasher(arr, howMany) { var result = []; for(var i=howMany;i<arr.length;i++){ result.push(arr[i]); } return result; }
12、数组查询算法
蛤蟆可以吃队友,也可以吃对手。
如果数组第一个字符串元素包含了第二个字符串元素的所有字符,函数返回true。
举例,["hello", "Hello"]
应该返回true,因为在忽略大小写的情况下,第二个字符串的所有字符都可以在第一个字符串找到。
["hello", "hey"]
应该返回false,因为字符串"hello"并不包含字符"y"。
["Alien", "line"]
应该返回true,因为"line"中所有字符都可以在"Alien"找到。
function mutation(arr) {var arr1 = arr[0].toLowerCase(); console.log(arr1)var arr2 = arr[1].toLowerCase();for(var i=0;i<arr[1].length;i++){ if(arr1.indexOf(arr2[i]) == -1){return false; } }return true; }
13、删除数组中特定值
真假美猴王!
删除数组中的所有假值。
在JavaScript中,假值有false
、null
、0
、""
、undefined
和 NaN
。
function bouncer(arr) {// Don't show a false ID to this bouncer.for(var i=0;i<arr.length;i++){if(!arr[i] == true){ arr.splice(i,1); i--; } }return arr; }
14、去除数组中任意多个值
金克斯的迫击炮!
实现一个摧毁(destroyer)函数,第一个参数是待摧毁的数组,其余的参数是待摧毁的值。
function destroyer(arr) {// Remove all the valuesvar arr = arguments[0]; console.log(arr[1]);var data = Array.prototype.slice.call(arguments,1);for(var j=0;j<data.length;j++){for(var i=0;i<arr.length;i++){if(arr[i] == data[j]){ arr.splice(i,1); i--; } } }return arr; }
15、数组排序并插入值
我身在何处?
先给数组排序,然后找到指定的值在数组的位置,最后返回位置对应的索引。
举例: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
。
function where(arr, num) { arr.sort(function(a,b){return a - b; });for(var i=0;i<arr.length;i++){if(num > arr[i] && num < arr[i+1]){return i+1; }else if(num == arr[i]){return i; }else if(num >arr[arr.length-1]){return arr.length; } } }
16、位移密码算法
让上帝的归上帝,凯撒的归凯撒。
下面我们来介绍风靡全球的凯撒密码Caesar cipher
,又叫移位密码。
移位密码也就是密码中的字母会按照指定的数量来做移位。
一个常见的案例就是ROT13密码,字母会移位13个位置。由'A' ↔ 'N', 'B' ↔'O',以此类推。
写一个ROT13函数,实现输入加密字符串,输出解密字符串。
所有的字母都是大写,不要转化任何非字母形式的字符(例如:空格,标点符号),遇到这些特殊字符,跳过它们。
function rot13(str) { // LBH QVQ VG!var result = [];for(var i=0;i<str.length;i++){if(str.charCodeAt(i) >= 65 && str.charCodeAt(i) <= 90){var code = str.charCodeAt(i) + 13;if(code>90){ code = str.charCodeAt(i) + 13 - 26; } result.push(String.fromCharCode(code)); }else{ result.push(str[i]); } }return result.join(""); }
Atas ialah kandungan terperinci 分享一个初级脚本算法实例. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Cabaran biasa yang dihadapi oleh algoritma pembelajaran mesin dalam C++ termasuk pengurusan memori, multi-threading, pengoptimuman prestasi dan kebolehselenggaraan. Penyelesaian termasuk menggunakan penunjuk pintar, perpustakaan benang moden, arahan SIMD dan perpustakaan pihak ketiga, serta mengikuti garis panduan gaya pengekodan dan menggunakan alat automasi. Kes praktikal menunjukkan cara menggunakan perpustakaan Eigen untuk melaksanakan algoritma regresi linear, mengurus memori dengan berkesan dan menggunakan operasi matriks berprestasi tinggi.

01Garis prospek Pada masa ini, sukar untuk mencapai keseimbangan yang sesuai antara kecekapan pengesanan dan hasil pengesanan. Kami telah membangunkan algoritma YOLOv5 yang dipertingkatkan untuk pengesanan sasaran dalam imej penderiaan jauh optik resolusi tinggi, menggunakan piramid ciri berbilang lapisan, strategi kepala pengesanan berbilang dan modul perhatian hibrid untuk meningkatkan kesan rangkaian pengesanan sasaran dalam imej penderiaan jauh optik. Menurut set data SIMD, peta algoritma baharu adalah 2.2% lebih baik daripada YOLOv5 dan 8.48% lebih baik daripada YOLOX, mencapai keseimbangan yang lebih baik antara hasil pengesanan dan kelajuan. 02 Latar Belakang & Motivasi Dengan perkembangan pesat teknologi penderiaan jauh, imej penderiaan jauh optik resolusi tinggi telah digunakan untuk menggambarkan banyak objek di permukaan bumi, termasuk pesawat, kereta, bangunan, dll. Pengesanan objek dalam tafsiran imej penderiaan jauh

1. Latar Belakang Pembinaan 58 Portrait Platform Pertama sekali, saya ingin berkongsi dengan anda latar belakang pembinaan 58 Portrait Platform. 1. Pemikiran tradisional platform pemprofilan tradisional tidak lagi mencukupi Membina platform pemprofilan pengguna bergantung pada keupayaan pemodelan gudang data untuk menyepadukan data daripada pelbagai barisan perniagaan untuk membina potret pengguna yang tepat untuk memahami tingkah laku, minat pengguna dan keperluan, dan menyediakan keupayaan sampingan, akhirnya, ia juga perlu mempunyai keupayaan platform data untuk menyimpan, bertanya dan berkongsi data profil pengguna dan menyediakan perkhidmatan profil dengan cekap. Perbezaan utama antara platform pemprofilan perniagaan binaan sendiri dan platform pemprofilan pejabat pertengahan ialah platform pemprofilan binaan sendiri menyediakan satu barisan perniagaan dan boleh disesuaikan atas permintaan platform pertengahan pejabat berkhidmat berbilang barisan perniagaan, mempunyai kompleks pemodelan, dan menyediakan lebih banyak keupayaan umum. 2.58 Potret pengguna latar belakang pembinaan potret di platform tengah 58

Mengira kedengaran mudah, tetapi sangat sukar untuk dilaksanakan dalam amalan. Bayangkan anda diangkut ke hutan hujan tropika yang asli untuk menjalankan banci hidupan liar. Setiap kali anda melihat haiwan, ambil gambar. Kamera digital hanya merekodkan jumlah bilangan haiwan yang dijejaki, tetapi anda berminat dengan bilangan haiwan unik, tetapi tiada statistik. Jadi apakah cara terbaik untuk mengakses populasi haiwan yang unik ini? Pada ketika ini, anda mesti berkata, mula mengira sekarang dan akhirnya bandingkan setiap spesies baharu daripada foto ke senarai. Walau bagaimanapun, kaedah pengiraan biasa ini kadangkala tidak sesuai untuk jumlah maklumat sehingga berbilion-bilion penyertaan. Para saintis komputer dari Institut Statistik India, UNL, dan Universiti Nasional Singapura telah mencadangkan algoritma baharu - CVM. Ia boleh menganggarkan pengiraan item yang berbeza dalam senarai panjang.

1. Tugas utama rangka kerja keseluruhan boleh dibahagikan kepada tiga kategori. Yang pertama ialah penemuan struktur sebab akibat, iaitu mengenal pasti hubungan sebab akibat antara pembolehubah daripada data. Yang kedua ialah anggaran kesan sebab akibat, iaitu membuat kesimpulan daripada data tahap pengaruh satu pembolehubah ke atas pembolehubah yang lain. Perlu diingat bahawa impak ini tidak merujuk kepada sifat relatif, tetapi kepada bagaimana nilai atau taburan pembolehubah lain berubah apabila satu pembolehubah diintervensi. Langkah terakhir ialah membetulkan bias, kerana dalam banyak tugas, pelbagai faktor boleh menyebabkan pengedaran sampel pembangunan dan sampel aplikasi berbeza. Dalam kes ini, inferens sebab boleh membantu kami membetulkan bias. Fungsi ini sesuai untuk pelbagai senario, yang paling tipikal ialah senario membuat keputusan. Melalui inferens kausal, kami dapat memahami cara pengguna yang berbeza bertindak balas terhadap gelagat membuat keputusan kami. Kedua, dalam industri

Python ialah bahasa pengenalan pengaturcaraan yang ideal untuk pemula melalui kemudahan pembelajaran dan ciri yang berkuasa. Asasnya termasuk: Pembolehubah: digunakan untuk menyimpan data (nombor, rentetan, senarai, dll.). Jenis data: Mentakrifkan jenis data dalam pembolehubah (integer, titik terapung, dll.). Operator: digunakan untuk operasi matematik dan perbandingan. Aliran kawalan: Kawal aliran pelaksanaan kod (penyataan bersyarat, gelung).

Pythonmemperkasakan pemula dalam menyelesaikan masalah.Sintaksnya yang mesra pengguna, perpustakaan luas, dan ciri-ciri seperti pembolehubah, pernyataan bersyarat, dan pembangunan kod yang cekap boleh dilonggarkan. Daripada mengurus data untuk mengawal aliran program dan melaksanakan tugasan berulang, Pythonprovid

Teka-teki pengaturcaraan C++ meliputi algoritma dan konsep struktur data seperti jujukan Fibonacci, faktorial, jarak Hamming, nilai maksimum dan minimum tatasusunan, dll. Dengan menyelesaikan teka-teki ini, anda boleh menyatukan pengetahuan C++ dan meningkatkan pemahaman algoritma dan kemahiran pengaturcaraan.
