剑指offer の 11-20 之javascript实现

11--输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。

function getNum(n){
    var count=0;
    if(n<0){
        n=n&0x7FFFFFFF;  //负数的补码取出来
        count++;//最高位的符号位1,加到count中
    }
    while(n){
      count+=n%2  //取余,同时将该二进制数各位相加,获得1的个数
      n>>=1  //右移1位,相当于除以2
    }
    return count
}
console.log(getNum(10));

12--给定一个double类型的浮点数baseint类型的整数exponent。求baseexponent次方。

function Power(base, exponent)  
{
    // write code here
    var position=true;
    if(exponent==0){
        return 1;
    }else if(exponent<0){
        exponent*=-1;
        position=false;  
    }
    var pow=1.0;
    for(var i=1;i<=exponent;i++){
        pow*=base
    }
    if(!position){
        pow=1.0/pow;
    }
    return pow
}

 13--输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。

function reOrderArray(array)  
{
    var left=[];
    var right=[];
    for(var i=0;i<array.length;i++){
        if(array[i]%2==0){   //right数组用来存放偶数
            right.push(array[i]);
        }else{
            left.push(array[i]);  //left数组用来存放奇数
        }
    }
    for(var i=0,len=right.length;i<len;i++){
        left.push(right[i]);
    }
    return left;
}

 14--输入一个链表,输出该链表中倒数第k个结点

function FindKthToTail(head, k)  
{
    // write code here
    var p=head;
    var q=head; //p、q开始都指向头指针
    for(var i=0;p&&i<k;i++){   //将p向后移动k个节点
        p=p.next;
    }
    if(i<k){   //数据错误,即还没遍历到第k个位置,数据就结束了
        return null;
    }
    while(p!=null){  //p、q同时向后移动,当p移动到链表最后时,q正好移动//到倒数第k个节点,p与q之间相差k
        p=p.next;
        q=q.next;
    }
    return q;
}
宝剑锋从磨砺出,梅花香自苦寒来。
原文地址:https://www.cnblogs.com/haimengqingyuan/p/6917873.html