js-剑指offer刷题记录(代码的完整性)

1.数值的正数次方

给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。

保证base和exponent不同时为0

我的解法

Math.pow(x,y)??
function Power(base, exponent)
{
        let r = 1
        while(exponent--){
            r*=base
        }
        return r
}

其他分析

上面做法肯定不行,就去看题解了。求幂次方也能玩出花。。。
快速幂
百度百科中描述直观一些,如下图
在这里插入图片描述
也就是说计算a的11次方,只要计算a的1次方、a的2次方和a的8次方,再相乘就行了。我们需要找到幂的二进制表达中为1的位
流程

  • 数exponent移位到为0时,停止循环

    • exponent & 1 == 0时,res = res*x
    • x = x*x
    • 数exponet右移一位

    在这里插入图片描述

function Power(base, exponent)
{
    let res = 1
    let n
    if(exponent==0){
        return 1
    }else if(exponent<0){   //指数为负
        n = -exponent
    }else{
        n = exponent
    }
    
    while(n){
        if(n&1){
            res *=base 
        }
        base *=base  //这里注意!!!
        n = n >>1
    }
    return exponent>0 ? res:1/res
}

2.调整数组顺序使奇数位于偶数前面

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

我的解法

一开始的想法:遍历数组,遇到偶数就删掉然后从数组末尾push进去。
但是!如果数组末尾都是奇数,也就是说还没遍历完数组,所有的偶数都已经push进末尾了,再接着循环就破坏偶数的顺序了。

function reOrderArray(array)  //错错错
{
    for(let i = 0;i<array.length;i++){
        if(array[i]%2 ==0){
            let tmp = array[i]
            array.splice(i,1)
            array.push(tmp)
        }
    }
    return array
}

又想了一个办法:遍历数组把偶数都放进一个空数组,然后把空数组与原数组拼接。
但是!遇到连续偶数的时候,删了前面的偶数后面的偶数顶上,应该继续留在这一位处理,但是i++了,就跳过了一个偶数

function reOrderArray(array) //错错错
{
    let arr = []
    for(let i = 0;i<array.length;i++){  //循环出问题了
        if(array[i]%2 ==0){
            let tmp = array[i]
            array.splice(i,1)
            arr.push(tmp)
        }
    }
    return array.concat(arr)
}

终极笨办法:两个空数组,一个放奇数,一个放偶数。遍历完了之后,拼接俩数组。

 function reOrderArray(array)  //对了
{
    let arr1 = []
    let arr2 = []
    for(let i = 0;i<array.length;i++){
        if(array[i]%2 ==0){
            arr2.push(array[i])
        }else{
            arr1.push(array[i])
        }
    }
    return arr1.concat(arr2)
}

其实之前两个办法出问题的原因就是,数组遍历的时候还改了原数组,那么一位一位遍历的时候就会出错。

发布了21 篇原创文章 · 获赞 0 · 访问量 177

猜你喜欢

转载自blog.csdn.net/adrenalineiszzz/article/details/104842552
今日推荐