剑指offer——javascript编程

1、一个整型数组里除了两个数字之外,其他的数字都出现了偶数次。请写程序找出这两个只出现一次的数字。

//indexOf()和lastIndexOf()这两个位置方法,indexOf()从头开始向后查找,并返回查找元素的位置,若没有
//则返回-1,lastIndexOf()从后往前查找,同样返回查找元素在数组中的位置。
 
function FindNumsAppearOnce(array)
{
    var len = array.length;
    var list = [];
    for(var i=0;i<len;i++){
        if(array.indexOf(array[i]) == array.lastIndexOf(array[i])){
            list.push(array[i]);
        }
    }
    return list;
}

2、输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。

     例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。

//join():把数组中的所有元素放入一个字符串,内可指定连接符,比如:join('#');
//toString():把数字转换为字符串
//parseInt():解析一个字符串,并把其转换为整数
//sort():对数组元素进行排序,并返回排序好的数组。
//如果 compareFunction(a, b) (返回的值)小于0,那么a会被排列到b之前,即参数a,b的顺序保持原样;
//如果 compareFunction(a, b) (返回的值) 等于0,a和b的相对位置不变;
//如果 compareFunction(a, b) (返回的值)大于0,b会被排列到a之前,即交换参数a,b的顺序。

function PrintMinNumber(numers)
{
    // write code here
    numbers.sort(function(num1,num2){
        var a=num1.toString();
        var b=num2.toString();
        if(parseInt(a+b)>parseInt(b+a)){
            return 1;
        }else{
            return -1;
        }
    });
    return numbers.join('');
}

3、输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。

//递归思想
function reConstructBinaryTree(pre, vin)
{
    var result = null;
    if(pre.length>1){
        var root = pre[0];
        var vinRootIndex = vin.indexOf(root);
        var vinLeft = vin.slice(0,vinRootIndex);
        var vinRight = vin.slice(vinRootIndex+1,vin.length);
        pre.shift();
        var preLeft = pre.slice(0,vinLeft.length);
        var preRight = pre.slice(vinLeft.length,pre.length);
        result = {
            val:root,
            left:reConstructBinaryTree(preLeft,vinLeft),
            right:reConstructBinaryTree(preRight,vinRight),
        }   
    }else if(pre.length == 1){
        result = {
            val:pre[0],
            left:null,
            right:null,
        }
    }
    return result;
}

4、在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

//从数组的左下角开始比较查询
function Find(target,array){
    let lenX = array.length;
    let lenY = array[0].length;
    for(let i=lenX-1, j=0; i>=0 && j<lenY;){
        if(target > array[i][j]){
           j++;
        }else if(target < array[i][j]){
           i--; 
        }else{
            return true;
        }
    }
}

5、请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。

//使用正则表达式,结合数组的replace方法
function replaceSpace(str)
{
    var reg = new RegExp(" ","g");
    var newstr = str.replace(reg,"%20");
    return newstr;
}

6、输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。

//从头到尾依次将链表中的值插入数组中,以反序输出result数组即可
function printListFromTailToHead(head)
{
    var result = [];
    var n = head;
    while(n){
        result.push(n.val);
        n = n.next;
    }
    return result.reverse();
}

每日一练,后续积累哦~

猜你喜欢

转载自blog.csdn.net/DFF1993/article/details/81179839
今日推荐