剑指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类型的浮点数base和int类型的整数exponent。求base的exponent次方。
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;
}
宝剑锋从磨砺出,梅花香自苦寒来。

浙公网安备 33010602011771号