写一个函数,求两个整数之和,要求在函数体内不得使用 “+”、“-”、“*”、“/” 四则运算符号。
示例:
输入: a = 1, b = 1
输出: 2
提示:
a, b 均可能是负数或 0
结果不会溢出 32 位整数
解决方法:使用位运算
class Solution {
public:
int add(int a, int b) {
if(b ==0){
return a;
}
return add((a ^ b),unsigned(a & b)<<1);
}
};
数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。
你可以假设数组是非空的,并且给定的数组总是存在多数元素。
示例 1:
输入: [1, 2, 3, 2, 2, 2, 5, 4, 2]
输出: 2
限制:
1 <= 数组长度 <= 50000
解决方法:
使用 摩尔投票法
class Solution {
public:
int majorityElement(vector<int>& nums) {
int votes=1;
int num =nums[0];
vector<int>::iterator it = nums.begin();
it++;
for(;it !=nums.end();++it )
{
if(votes ==0)
{
num = *it;
votes ++;
}else if(num == *it)
{
votes++;
}else
{
votes --;
}
}
return num;
}
};
3.求1~100的和
不能用循环,不能用if,不能用公式
使用函数指针实现
#include
int sum0(int);
int sum1(int);
int (*arrP[2])(int) = { sum0,sum1 };
int sum0(int n)
{
return 0;
}
int sum1(int n)
{
return arrP[!!n](n - 1) + n;
}
int main()
{
int result = sum1(100);
printf("%d", result);
}