双栈实现队列:
class Solution
{
public:
void push(int node) {
if(!stack2.empty())
{
while(!stack2.empty())
{
stack1.push(stack2.top());
stack2.pop();
}
}
stack1.push(node);
}
int pop(){
int c;
if(!stack1.empty())
{
while(!stack1.empty())
{
stack2.push(stack1.top());
stack1.pop();
}
}
c = stack2.top();
stack2.pop();
return c;
}
private:
stack<int> stack1;
stack<int> stack2;
};
但是我看库里面的队列的pop操作没有返回值,不知道这个为啥有返回值。
输入一个整数,判断二进制形式有多少个1,其中负数以补码运算;
class Solution {
public:
int NumberOf1(int n) {
int count = 0;
for (int i = 1; i <= 32; ++i)
{
if ((n & 1) == 1)
++count;
n >>= 1;
}
return count;
}
};
统计一个数字在排序数组中出现的次数。
使用的是库里面提供的函数
class Solution {
public:
int GetNumberOfK(vector<int> data ,int k) {
auto resultPair = equal_range(data.begin(), data.end(),k);
return resultPair.second - resultPair.first;
}
};
下面这个是我给出的方法,使用的是二分查找。
class Solution {
public:
int GetNumberOfK(vector<int> data ,int k) {
int L = 0;
int R = data.size() - 1;
int count = 0;
int middle;
int middle2;
int middle3;
while (L <= R)
{
middle = (L + R) / 2;
if (data[middle]>k)
R = middle - 1;
else if (data[middle] < k)
L = middle + 1;
else
{
middle2 = middle3 = middle;
count++;
while (data[--middle2] == k)
count++;
while (data[++middle3] == k)
count++;
return count;
}
}
return 0;
}
};
就是先使用二分查找找到找到序列中的一个数字,然后再对这个数字左右两边展开查找