资讯专栏INFORMATION COLUMN

javascript实现一些算法题

DirtyMind / 795人阅读

摘要:字符的左右移动给定一个字符串,这个字符串为号和个字母的任意组合。题目二在一个字符串中找到第一个只出现一次的字符。乘除模拟位运算真正位运算输入一个整数,求从到这个整数的十进制表示中出现的次数。

字符的左右移动

给定一个字符串,这个字符串为号和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));

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/79044.html

相关文章

  • 深入理解js

    摘要:详解十大常用设计模式力荐深度好文深入理解大设计模式收集各种疑难杂症的问题集锦关于,工作和学习过程中遇到过许多问题,也解答过许多别人的问题。介绍了的内存管理。 延迟加载 (Lazyload) 三种实现方式 延迟加载也称为惰性加载,即在长网页中延迟加载图像。用户滚动到它们之前,视口外的图像不会加载。本文详细介绍了三种延迟加载的实现方式。 详解 Javascript十大常用设计模式 力荐~ ...

    caikeal 评论0 收藏0
  • 前端周报:前端面试及答案总结;JavaScript参数传递的深入理解

    摘要:前端面试题及答案总结掘金技术征文金三银四,金九银十,用来形容求职最好的几个月。因为的存在,至少在被标准化的那一刻起,就支持异步编程了。然而异步编程真正发展壮大,的流行功不可没。 showImg(https://segmentfault.com/img/bVVQOH?w=640&h=319); 1、2017前端面试题及答案总结 |掘金技术征文 金三银四,金九银十,用来形容求职最好的几个月...

    ermaoL 评论0 收藏0
  • 前端排序算法总结;前端面试2.0;JavaScript异步编程

    摘要:与异步编程按照维基百科上的解释独立于主控制流之外发生的事件就叫做异步。因为的存在,至少在被标准化的那一刻起,就支持异步编程了。然而异步编程真正发展壮大,的流行功不可没。在握手过程中,端点交换认证和密钥以建立或恢复安全会话。 1、前端 排序算法总结 排序算法可能是你学编程第一个学习的算法,还记得冒泡吗? 当然,排序和查找两类算法是面试的热门选项。如果你是一个会写快排的程序猿,面试官在比较...

    aaron 评论0 收藏0
  • 前端排序算法总结;前端面试2.0;JavaScript异步编程

    摘要:与异步编程按照维基百科上的解释独立于主控制流之外发生的事件就叫做异步。因为的存在,至少在被标准化的那一刻起,就支持异步编程了。然而异步编程真正发展壮大,的流行功不可没。在握手过程中,端点交换认证和密钥以建立或恢复安全会话。 1、前端 排序算法总结 排序算法可能是你学编程第一个学习的算法,还记得冒泡吗? 当然,排序和查找两类算法是面试的热门选项。如果你是一个会写快排的程序猿,面试官在比较...

    ARGUS 评论0 收藏0
  • 前端排序算法总结;前端面试2.0;JavaScript异步编程

    摘要:与异步编程按照维基百科上的解释独立于主控制流之外发生的事件就叫做异步。因为的存在,至少在被标准化的那一刻起,就支持异步编程了。然而异步编程真正发展壮大,的流行功不可没。在握手过程中,端点交换认证和密钥以建立或恢复安全会话。 1、前端 排序算法总结 排序算法可能是你学编程第一个学习的算法,还记得冒泡吗? 当然,排序和查找两类算法是面试的热门选项。如果你是一个会写快排的程序猿,面试官在比较...

    April 评论0 收藏0

发表评论

0条评论

DirtyMind

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<