数值的整数次方
题目描述
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
保证base和exponent不同时为0
实现思路
归纳好条件,若base为0则返回0,若exponent为0则返回1;
暴力求解,若exponent>0累乘即可;若exponent<0,最后求倒数即可。
but,这种做法小学生都会,其实这道题的作业主要是了解快速幂算法。
代码解释:指数不断除以2,base在循环中执行平方操作。当指数为奇数时,除以2会失去一次方的累乘,需将这次操作记录到res中。推导自行百度。
具体实现
class Solution {
public:
double Power(double base, int exponent) {
double res=1;
if(base==0)
return 0;
if(exponent==0)
return 1;
int p = abs(exponent);
while(p!=0){
if(p&1==1){
res = base*res;
}
base*=base;
p=p>>1;
}
if(exponent>0)
return res;
if(exponent<0)
return 1.0/res;
}
};
调整数组顺序使奇数位于偶数前面
题目描述
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
实现思路
空间换时间:遍历两次原数组分别将奇数和偶数按顺序存进另一个数组,再赋值。
时间换空间:遍历数组,若遇到奇数时,向前遍历,若前一个数为偶数则不断往前插入。
具体实现(空间换时间)
class Solution {
public:
void reOrderArray(vector<int> &array) {
vector<int> res;
for(int i=0;i<array.size();i++){
if(array[i]%2!=0){
res.push_back(array[i]);
}
}
for(int i=0;i<array.size();i++){
if(array[i]%2==0){
res.push_back(array[i]);
}
}
array=res;
}
};