整数反转
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
示例 1:输入: 123, 输出: 321
示例 2:输入: -123,输出: -321
示例 3:输入: 120, 输出: 21
注意:假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。
我们抓取num最低位(%10)赋给reverse,*10后将num缩小十倍(/10)再取余再加给reverse,一直进行到/10等于0为止;这样一直进行直到原本的最高有效位加到reverse变成了最低位。达到了反转整数的目的;
#define IntMax 0x7FFFFFFF
#define IntMin 0x80000000
int min = IntMin;
int max = IntMax;
int reverse(int x)
{
int shang = x;
long int result = 0;
while(shang)
{
result = result*10+shang%10;
shang /= 10;
if(result>max || result<min)
{return 0;}
}
return result;
}
判断2的次幂
给定一个整数,编写一个函数来判断它是否是 2 的幂次方。
示例 1:输入: 1,输出: true解释: 2 0 = 1
示例 2:输入: 16,输出: true解释: 24 = 16
示例 3:输入: 218,输出: false
首先我们来思考是2的幂次方具有什么特征:
1,大于0;
2,这个数的二进制位表达式中一定只有一个位置为1;
根据这些特点:我们想到了一个神奇的表达式:n=n&(n-1),这个表达式的神奇之处在于:每进行一次运算,n的二进制表达式最右边的一个1消失,直到全为0位置,所以当我们使用用这个表达式运算一次后n=0,那么这个数的二进制位必然只有一个1;
所以我们可以很轻松地实现这个功能:
bool isPowerOfTwo(int n)
{
if(n>0)
{
return !(n&(n-1));
}
return false;
}
求众数
给定一个大小为 n 的数组,找到其中的众数。众数是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。
你可以假设数组是非空的,并且给定的数组总是存在众数。
示例 1:输入: [3,2,3],输出: 3
示例 2:输入: [2,2,1,1,1,2,2],输出: 2
从题中我们可以知道众数在数组中必定是超过一半的,所以我们直接从第一个元素开始,我们开始向后count计数,如果相同加一,遇到不同的字符减一,如果count=0;就换下一个字符开始检测,最后肯定可以找到那个众数。
我们来看看具体如何实现:
int majorityElement(int* nums, int numsSize)
{
int count = 1;
int judge = *nums;
for(int i =1;i<numsSize;i++)
{
if(judge==nums[i])
{
count++;
}
else
{
count--;
if(count==0)
{
judge = nums[i];
count = 1;
}
}
}
return judge;
}