zoukankan      html  css  js  c++  java
  • 几个小编程题(数组去重,获取字符串中最多字符)

    1、编写一个方法去掉一个数组的重复元素:

    方法一:普通for循环嵌套;

     1 function removeSame(arr){
     2         console.log(arr);
     3         for(var i=0, len = arr.length; i<len; i++){
     4             for(var j=i+1; j<len-i; j++){
     5                 if(arr[i] === arr[j]){
     6                     arr.splice(arr[j], 1);  //如果检测到有重复的元素则删除
     7                     j--;    //当有多个重复元素时向前移一个索引防止遗漏某些元素
     8                 }
     9             }
    10         }
    11         console.log(arr);
    12         return arr;
    13     }
    14     
    15     var arr = [1,2,3,3,3,3,3,4,4];
    16     removeSame(arr);

    方法二:利用for...in去重;

     1 function  removeSame(arr){
     2             var obj = {};
     3             var newArr = [];
     4             var key;
     5 
     6             for(var i=0; i<arr.length; i++){
     7                 key = arr[i];
     8                 if(obj[key]){
     9                     obj[key] = 0;  //若未添加进对象,则给其赋值为0;
    10                 }else{
    11                     obj[key] = 0;  //若添加进对象过(即出现重复元素),则将其覆盖原属性,保证数组中只有唯一一个属性名;
    12                 };
    13             };
    14 
    15             for(key in obj){
    16                 newArr.push(key);  //将去重后的对象中的属性添加至新数组
    17             };
    18 
    19             console.log(newArr);
    20 }

    方法三:利用indexOf()(indexOf可以返回元素在数组中的索引位置);

    1 function onlyone(arr){
    2         var arr1=[];     //用于保存已去重元素的数组
    3         for(var i=0;i<arr.length;i++){
    4             if(arr1.indexOf(arr[i])==-1){//arr的第i个元素是否已经保存进arr1,若保存过,跳过(即重复的元素不进数组);否则把当前项push到数组里面
    5                 arr1.push(arr[i]);
    6             }
    7         }
    8         return arr1;
    9 }

    2. 判断一个字符串中出现次数最多的字符,并统计次数:

     1 function getMaxLetter(){
     2     var obj={};            //保存拆分了的字符和出现次数
     3     
     4     for(var i=0, l=str.length, k; i<l; i++){
     5         k = str.charAt(i);        //将字符串中的各字符提取出来
     6         if(obj[k]){
     7             obj[k]++;            //字符的索引作为对象的值,若已出现过则进行++
     8         }else{
     9             obj[k] = 1;            //若对象中无此元素则赋值1,说明出现1次
    10         }
    11     }
    12     console.log(obj);
    13     
    14     var m = 0;                    //出现最多的次数
    15     var myArr = [];        //用于保存字符串中出现相同数量的最多字符
    16     
    17     for(var k in obj){            //for in遍历对象中的属性值(即各字符)
    18         if( obj[k] >= m ){        //若有比最大值还大的,则重新赋值
    19             if( obj[k] > m ){    
    20                 myArr = [];    
    21             }
    22             myArr.push(k);        //若相等,则将相同的字符存入数组
    23             m = obj[k];            //获取次数
    24         }
    25     }
    26     console.log('出现次数最多的字符是:' + myArr + ' ,出现的次数:' + m);
    27 }
    28 
    29 var str = "hello worlllllddddddd";
    30 getMaxLetter(str);
  • 相关阅读:
    java学习笔记07-循环
    java学习笔记06-条件语句
    java学习笔记05-运算符
    java学习笔记04-基本数据类型
    java学习笔记03-基本语法
    java学习笔记02-Eclipse IDE配置
    java学习笔记01-环境配置
    Jmeter学习笔记03-元件作用域及执行顺序
    JMeter学习笔记02-基础介绍
    [luogu3369/bzoj3224]普通平衡树(splay模板、平衡树初探)
  • 原文地址:https://www.cnblogs.com/momo798/p/6115443.html
Copyright © 2011-2022 走看看