最近前端笔试赶上的笔试题有感

1.给出一个字符串,显示出字符串里重复次数最多的元素,并显示次数出来javascript

  如:"sdoiokasdhdiuwasad" java

  输出:  出现最多:d    出现次数:4node

 1 function remenber(str){
 2       var o = {};
 3       for (var i = 0; i < str.length; i++) {
 4         if (o[str[i]]) { //char就是对象o的一个属性,o[char]是属性值,o[char]控制出现的次数
 5           o[str[i]]++; //次数加1
 6         } else {
 7           o[str[i]] = 1; //若第一次出现,次数记为1
 8         }
 9       }
10       console.log(o); //输出的是完整的对象,记录着每个字符及其出现的次数
11       //遍历对象,找到出现次数最多的字符和次数
12         var max = 0;
13         for (var key in o) {
14           if (max < o[key]) {
15             max = o[key]; //max始终储存次数最大的那个
16           }
17         }
18         for (var key in o){
19           if (o[key] == max){
20           //console.log(key);
21             console.log("最多的字符是" + key);
22             console.log("出现的次数是" + max);
23           }
24         }
25     }
26     remenber("sdoiokasdhdiuwasad");

2.给出一个数组,数组中的元素最多能够出现两次git

 1 function newarr(arr){
 2       var tmp = [];
 3       var str = ",";
 4       for(var i = 0; i < arr.length; i++){
 5           var sm = str.match(new RegExp(","+arr[i]+",", "g"));
 6           if(!sm || sm.length < 2) {
 7               tmp.push(arr[i]);
 8               str += arr[i] + ",";
 9           }
10       }
11       console.log("原数组是:" + arr);
12       console.log("清除后的数组:"+tmp);
13     }
14     newarr([12,34,5,6,32,12,34,56,5,12,34]);

3.给出一个数组,求这个数组的最大和github

  如[34,5,1,22],输出534221算法

function a(arr){
      var st = [];
      var res = [];
      for(var i=0; i < arr.length; i++){  //将数组元素转换为string类型
        var arr1 = arr[i].toString();
        st.push(arr1);
      }
      console.log(st[1][0]);
      for(var j = 0; j < arr.length-1; j++){ //用冒泡排序将数组的元素的第一个数进行排序的到从小到大的排序
        for(var k = 0; k < arr.length-j-1; k++){
          if(st[j][0] > st[j+1][0]){
            var temp = st[k];
            st[k] = st[k+1];
            st[k+1] = temp;
          }
        }
      }
      for(var c = st.length; c >= 0; c--){//将冒泡排完序后的到的数组进行倒序排序
        res.push(st[c]);
      }
      console.log(res.join(""));//最后合并元素
    }
    a([12,23,34,5]);

 四、给一个有序数组建立二叉搜索树数组

var Array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; 
      var Tree = createTree(Array); 
      console.log(Tree); 
      // 构造一个节点 
      function Node(nodeData, leftData, rightData) { 
        this.nodeData = nodeData; 
        this.leftData = leftData; 
        this.rightData = rightData; 
      } 
      // 每次取中点做为根节点,向左和向右递归 
      function createTree(array) { 
        if (array.length <= 0) { 
          return null; 
        } else { 
          var mid = parseInt(array.length / 2); 
          var node = new Node(array[mid], null, null); 
          var leftArray = array.slice(0 , mid); 
          var rightArray = array.slice(mid + 1 , array.length ); 
          node.leftData = createTree(leftArray); 
          node.rightData = createTree(rightArray); 
          return node; 
        } 
      }

五、JS快速排序dom

function quicksort(arr){
       if(arr.length <= 1){
         return arr;
       }
       var mid = Math.floor(arr.length/2);
       //用于肯定中间基数在arr中的位置
       var andtwo = arr.splice(mid,1)[0];
       //用于做链接left和right两个数组的中间基数
       var left = [];
       var right = [];
       for(var i = 0; i < arr.length; i++){
         if(arr[i] > andtwo){
           right.push(arr[i]); 
         }else{
           left.push(arr[i]);
         }
       }
       return quicksort(left).concat([andtwo],quicksort(right));
     }
 console.log(quicksort([12,4,43,16,34,76,8,97]));

六、给一个字符串如as-ds-aw-gfde-ioa,用一个函数实现输出结果为as-Ds-Aw-Gfde-Ioa函数

function toUp(str){
      var mixstr = str.split("-");//将str拆分
      var res = [mixstr[0]];//建立新数组用于存放转换好的元素,由于第一个不须要转换,因此直接存放进去了
      for(var i = 1; i < mixstr.length; i++){
        var resone = mixstr[i][0].toUpperCase() + mixstr[i].substring(1,mixstr[i].length);//将str里的单个字符串转换成首字母为大写的形式
        res.push(resone);
      }
      var outstr = res.join("-");
      console.log(outstr);
    }
    toUp("as-ds-aw-gfde-ioa");

七、实现一个算法,随机生成指制定长度的字符窜。ui

  好比给定 长度 8  输出 2debl8xp