javascript完成一些算法题

字符的摆布挪动

给定一个字符串,这个字符串为号和26个字母的恣意组合。如今需要把字符串中的号都挪动到最左边,而把字符串中的字母移到最右边并坚持相对递次稳定,请求时候复杂度和空间复杂度最小。

var stars = 'sosunn**afns*repsni*';

var rs = stars.split('');
var flag = 0;
for(var i=rs.length -1; i>=0; i--){
    if(rs[i] == '*'){
        flag++;
    }else{
        if(flag == 0)
            continue;
        else{
            rs[i+flag] = rs[i];
            rs[i] = '*';
        }
    }
}
console.log(rs.join(''))

map妙用

题目一:

给定一个字符串,写一个函数,查找出该字符串中每一个字符涌现的次数,请求辨别大小写,且时候复杂度为O(n)。

var str = 'safaAuasfAJIFjHDWEFHDaAueUEWda';
var results = {};
var rs = str.split('');

rs.forEach(function(al){
    if(results[al] === undefined){
        results[al] = 1;
    }else{
        results[al]++;
    }
})

var keys = Object.keys(results);
for(var i = 0; i < keys.length; i++){
    console.log(keys[i] + ' : ' + results[keys[i]]);
}

题目二:

在一个字符串中找到第一个只涌现一次的字符。如输入abaccdefbf,则输出d。

var str = 'abaccdefbf';
var results = {};
var rs = str.split('');

rs.forEach(function(al){
    if(results[al] === undefined){
        results[al] = 1;
    }else{
        results[al]++;
    }
})

var keys = Object.keys(results);
for(var i = 0; i < keys.length; i++){
    if(results[keys[i]] === 1){
        console.log(keys[i]);
        break;
    }
}

题目三:

最近在坛子里的题目,实在活用map,很轻易就处理了,题目在这:https://segmentfault.com/q/1010000004891… ,就是json花样重整。我的解答以下:

var json1 = { ... };
var jmap = {};
var result = [];

json1.forEach(function(al){
    var key = al.menuDate + '_' + al.dinnerTime;
    if(typeof jmap[key] === 'undefined'){
        jmap[key] = [];
    }
    jmap[key].push(al);
})

var keys = Object.keys(jmap);
for(var i = 0; i < keys.length; i++){
    var rs = keys[i].split('_');
    result.push({menuDate:rs[0],dinnerTime:rs[1],value:jmap[keys[i]]});
}

位运算

输入一个整数,求该整数的二进制表达中有多少个1。

1.乘除模仿位运算:

(function(aInt){
    var intStr = [], count = 1;
    while(aInt > 1){
        if(aInt % 2 == 0){
            intStr.unshift(0);
        }else{
            intStr.unshift(1);
            count++;
        }
        aInt = Math.floor(aInt/2);
    }
    intStr.unshift(1);

    console.log('Binary String : ' + intStr.join(','));
    console.log('The count is  : ' + count);
}(28));

2.真正位运算:

(function(aInt){
    var intStr = [], count = 0;
    while(aInt > 0){
        var cur = aInt & 1;
        intStr.unshift(cur);
        if(cur == 1){
            count++;
        }
        aInt = aInt >> 1;
    }

    console.log('Binary String : ' + intStr.join(','));
    console.log('The count is  : ' + count);
}(10));

输入一个整数n,求从1到n这n个整数的十进制示意中1涌现的次数。

(function(aInt){
    var count = 0;
    for(var i = 1; i <= aInt; i++){
        var a = i;
        while(a >= 1){
            if(a % 10 == 1){
                count++;
            }
            a= Math.floor(a / 10);
        }
    }
    console.log('The count is  : ' + count);
}(13));
    原文作者:zhoutk
    原文地址: https://segmentfault.com/a/1190000004706724
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞