国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > JS > 正文

JS常用算法實現(xiàn)代碼

2024-05-06 16:32:53
字體:
來源:轉載
供稿:網(wǎng)友

本文的主要目的是幫助大家熟悉熟悉常用的幾個算法用JS的實現(xiàn),具體內(nèi)容如下

(1)數(shù)組去重

原理:定義一個對象obj,然后把數(shù)組元素作為obj的屬性名,利用屬性名是否重復進行判重

var unique = function(arr){  let obj = {};  let newArr = [];  arr.forEach(function(x){    if(!obj[x]){ //如果對象中沒有該元素對應的屬性      obj[x] = true;      newArr.push(x);    }  });  return newArr;}

(2)使用快速排序算法對數(shù)組進行排序

這里面包括兩種效果,一種是利用快排的特性實現(xiàn)了去重快排,另一種是不去重的快排。

原理:獲得目標數(shù)組,選定一個元素最為標志位,遍歷剩余的元素,比標志位大放右邊,比標志位小放左邊。

特別注意:還有與標志位相等的元素,如果你存儲相等的元素,就實現(xiàn)了去重,如果存儲了,就不去重。

var quickSort = function(arr){    if(arr.length <= 1){    return arr;  }    //定義一個左數(shù)組,定義一個右數(shù)組  let leftArr = [];  let rightArr = [];  //選定一個參照值  let tag = arr[0];    /*   * 使用如下方式判斷,會把重復元素去掉,就實現(xiàn)了快排的同時去重   */  for(let i = 0; i < arr.length; i++){    if(arr[i] < tag){ //將比tag小的元素放在左數(shù)組中      leftArr.push(arr[i]);    }    if(arr[i] > tag){ //將比tag大的元素放在右數(shù)組中      rightArr.push(arr[i]);    }  }    /*   * 使用如下方式就是使用快排進行排序,不去重   */  for(let i = 1; i < arr.length; i++){    if(arr[i] < tag){ //將比tag小的元素放在左數(shù)組中      leftArr.push(arr[i]);    }else{ //將比tag大的元素放在右數(shù)組中      rightArr.push(arr[i]);    }  }    //遞歸調(diào)用  return [].concat(quickSort(leftArr),[tag],quickSort(rightArr));}

(3)統(tǒng)計字符串中出現(xiàn)次數(shù)最多的字符

原理:這個和數(shù)組去重類似,也是利用一個對象obj,將數(shù)組元素作為對象的屬性名,如果不存在該屬性名,則值賦為1,如果存在,則值加1。

var maxShowTimes = function(str){  // 創(chuàng)建一個用于判重的對象  let obj = {};  // 判斷字符串是否為空或只有一個元素  if(str.length <= 1){    return str.length === 0?'字符串不能為空':str;  }  // 利用String的charAt()方法獲取各個字符  for(let i = 0; i <= str.length; i++){    if(!obj[str.charAt(i)]){ //如果不存在      obj[str.charAt(i)] = 1;     }else{ //如果存在      obj[str.charAt(i)] += 1;    }  }    // 在obj對象中尋找值最大的那個屬性  let maxChar = '';  let maxTimes = 0;  for(var k in obj){    if(obj[k] > maxTimes){      maxChar = k;      maxTimes = obj[k];    }  }  return maxChar;}

(4)不借助第三個變量實現(xiàn)兩個變量交換值

原理:就是一個變量替換,思路很巧妙,只能用于數(shù)字的交換。

var swap = function(a,b){  if(a === b){    return [a,b];  }  b = b - a; // 此處的 b - a中的b和a的值是最初的值  a = a + b; // a = a + b -a; 實現(xiàn)了將b的值賦給a  b = a - b; // b = a - (b - a) = 2a - b 相當于 2b = 2a;實現(xiàn)了將a的值賦給b  return [a,b];}

(5)求一個數(shù)組的最大差值

原理:遍歷一次數(shù)組,找到最大值和最小值,返回差值

var getMaxProfit = function(arr){  // 定義兩個變量,分別存貯最大值和最小值  let maxNum = arr[0];  let minNum = arr[0];  for(let i = 0; i < arr.length; i++){    if(arr[i] > maxNum){      maxNum = arr[i];    }    if(arr[i] < minNum){      minNum = arr[i];    }  }  return maxNum - minNum;}

(6)獲取任意長度的隨機字符串

原理:可以手動指定字符庫及隨機字符長度n,利用Math.floor()和Math.random()兩個方法實現(xiàn)獲取隨機字符。

var getRandomString = function(n){  // 定義隨機字符串的字符庫  let str = 'qwertyuiopasdfghjklzxcvbnm1234567890';  // 定義一個臨時變量tmp存儲生成的隨機字符串  let tmp = '';  //獲取str的長度  let len = str.length;  // 生成一個長度為n的隨機字符串  for(let i = 0; i < n; i++){    tmp += str.charAt(Math.floor(Math.random() * len));  }  return tmp;}

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網(wǎng)。


注:相關教程知識閱讀請移步到JavaScript/Ajax教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 凤冈县| 宜君县| 张掖市| 洛川县| 康马县| 共和县| 龙川县| 陇南市| 库伦旗| 巴楚县| 德格县| 互助| 梁平县| 富平县| 界首市| 五家渠市| 宝丰县| 乌什县| 应城市| 旬邑县| 井陉县| 安平县| 花垣县| 仁布县| 兴仁县| 夏河县| 文成县| 无锡市| 乌海市| 正阳县| 天柱县| 拉孜县| 新乡市| 德州市| 邯郸市| 江门市| 泰宁县| 安远县| 剑川县| 台江县| 定结县|