javascript实现一些算法题

数据开
• 阅读 4191

字符的左右移动

给定一个字符串,这个字符串为号和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));
点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Karen110 Karen110
3年前
一篇文章带你了解JavaScript日期
日期对象允许您使用日期(年、月、日、小时、分钟、秒和毫秒)。一、JavaScript的日期格式一个JavaScript日期可以写为一个字符串:ThuFeb02201909:59:51GMT0800(中国标准时间)或者是一个数字:1486000791164写数字的日期,指定的毫秒数自1970年1月1日00:00:00到现在。1\.显示日期使用
Easter79 Easter79
3年前
SpringBoot自定义序列化的使用方式
场景及需求:项目接入了SpringBoot开发,现在需求是服务端接口返回的字段如果为空,那么自动转为空字符串。例如:\    {        "id":1,        "name":null    },    {        "id":2,        "name":"x
Stella981 Stella981
3年前
JS 苹果手机日期显示NaN问题
问题描述newDate("2019122910:30:00")在IOS下显示为NaN原因分析带的日期IOS下存在兼容问题解决方法字符串替换letdateStr"2019122910:30:00";datedateStr.repl
Wesley13 Wesley13
3年前
mysql中时间比较的实现
MySql中时间比较的实现unix\_timestamp()unix\_timestamp函数可以接受一个参数,也可以不使用参数。它的返回值是一个无符号的整数。不使用参数,它返回自1970年1月1日0时0分0秒到现在所经过的秒数,如果使用参数,参数的类型为时间类型或者时间类型的字符串表示,则是从1970010100:00:0
Stella981 Stella981
3年前
JavaScript常用函数
1\.字符串长度截取functioncutstr(str,len){vartemp,icount0,patrn/^\x00\xff/,strre"";for(vari
Stella981 Stella981
3年前
SpringBoot自定义序列化的使用方式
场景及需求:项目接入了SpringBoot开发,现在需求是服务端接口返回的字段如果为空,那么自动转为空字符串。例如:\    {        "id":1,        "name":null    },    {        "id":2,        "name":"x
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
分布式系统的主键生成方案对比 | 京东云技术团队
UUID​UUID(通用唯一识别码)是由32个十六进制数组成的无序字符串,通过一定的算法计算出来。为了保证其唯一性,UUID规范定义了包括网卡MAC地址、时间戳、名字空间(Namespace)、随机或伪随机数、时序等元素,以及从这些元素生成UUID的算法。
Python进阶者 Python进阶者
1年前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这
美凌格栋栋酱 美凌格栋栋酱
5个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
数据开
数据开
Lv1
凭高远望,见家乡、只在白云深处。
文章
3
粉丝
0
获赞
0