ホームページ  >  記事  >  ウェブフロントエンド  >  JS共通アルゴリズム実装コード

JS共通アルゴリズム実装コード

高洛峰
高洛峰オリジナル
2016-12-07 09:57:32772ブラウズ

この記事の主な目的は、JS を使用して一般的に使用されるいくつかのアルゴリズムの実装を誰もが理解できるようにすることです。具体的な内容は次のとおりです

(1) 配列の重複排除

原則: オブジェクト obj を定義し、配列要素を obj の属性名として使用します。重複する属性名を使用して重複を特定します


(2) クイック ソート アルゴリズムを使用して配列を並べ替えます

これには 2 つの効果が含まれます。重複排除を実現するクイックソートとクイックソートの特徴、もう1つは重複排除を行わないクイックソートです。

原則: ターゲット配列を取得し、フラグとして要素を選択し、残りの要素を走査し、フラグより大きい要素を右側に、フラグより小さい要素を左側に配置します。

特記事項: フラグビットに等しい要素が存在する場合、それらを格納すると重複排除は行われません。

var unique = function(arr){
  let obj = {};
  let newArr = [];
  arr.forEach(function(x){
    if(!obj[x]){ //如果对象中没有该元素对应的属性
      obj[x] = true;
      newArr.push(x);
    }
  });
  return newArr;
}


(3) 文字列内で最も頻繁に出現する文字を数えます

原理: これは、オブジェクト obj を使用し、配列要素をオブジェクトの属性名として使用します。オブジェクトが存在しない場合、属性名、値は 1 に割り当てられ、存在する場合、値は 1 ずつ増加します。

var quickSort = function(arr){
   
  if(arr.length <= 1){
    return arr;
  }
   
  //定义一个左数组,定义一个右数组
  let leftArr = [];
  let rightArr = [];
  //选定一个参照值
  let tag = arr[0];
   
  /*
   * 使用如下方式判断,会把重复元素去掉,就实现了快排的同时去重
   */
  for(let i = 0; i < arr.length; i++){
    if(arr[i] < tag){ //将比tag小的元素放在左数组中
      leftArr.push(arr[i]);
    }
    if(arr[i] > tag){ //将比tag大的元素放在右数组中
      rightArr.push(arr[i]);
    }
  }
   
  /*
   * 使用如下方式就是使用快排进行排序,不去重
   */
  for(let i = 1; i < arr.length; i++){
    if(arr[i] < tag){ //将比tag小的元素放在左数组中
      leftArr.push(arr[i]);
    }else{ //将比tag大的元素放在右数组中
      rightArr.push(arr[i]);
    }
  }
   
  //递归调用
  return [].concat(quickSort(leftArr),[tag],quickSort(rightArr));
}


(4) 3 番目の変数を使用せずに 2 つの変数の交換値を実現するには

原則: これは変数の置換であり、アイデアは非常に賢明であり、数値の交換にのみ使用できます。 。

var maxShowTimes = function(str){
  // 创建一个用于判重的对象
  let obj = {};
  // 判断字符串是否为空或只有一个元素
  if(str.length <= 1){
    return str.length === 0?&#39;字符串不能为空&#39;: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 = &#39;&#39;;
  let maxTimes = 0;
  for(var k in obj){
    if(obj[k] > maxTimes){
      maxChar = k;
      maxTimes = obj[k];
    }
  }
  return maxChar;
}


(5) 配列の最大の差を求める

原理: 配列を 1 回走査し、最大値と最小値を見つけ、その差を返す

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; 实现了将b的值赋给a
  b = a - b; // b = a - (b - a) = 2a - b 相当于 2b = 2a;实现了将a的值赋给b
  return [a,b];
}


(6) Get任意の長さ ランダム文字列の原則

: 文字ライブラリとランダムな文字の長さ n を手動で指定し、Math.floor() メソッドと Math.random() メソッドを使用してランダムな文字を取得できます。

りー


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。