小编Lin*_*ing的帖子

相同的表达但不同的结果

所以我在leetcode中做了一个问题.它是使用队列实现堆栈.如果我在下面提交此代码.它被接受了.

class Stack {
    public:
    queue<int> que;
    // Push element x onto stack.
    void push(int x) {
        que.push(x);
        for(int i=0;i<que.size()-1;i++){
            que.push(que.front());
            que.pop();
        }
    }

    // Removes the element on top of the stack.
    void pop() {
        que.pop();
    }

    // Get the top element.
    int top() {
        return que.front();
    }

    // Return whether the stack is empty.
    bool empty() {
        return que.empty();
    }
};
Run Code Online (Sandbox Code Playgroud)

但如果我只改for(int i=0;i<que.size()-1;++i)for(int i=0;i<=que.size()-2;i++),我有时间限制的突破.最后执行的输入:push(1),empty().有人可以告诉我为什么??? 谢谢

c++

3
推荐指数
1
解决办法
75
查看次数

删除C++中的操作

我不明白是什么delete意思.

例如,在下面的代码,delete ptr;所以pointer variable ptr被删除或the memory ptr pointed to删除?

int *ptr = new int; 
*ptr = 7;  
delete ptr; 
Run Code Online (Sandbox Code Playgroud)

c++ new-operator dynamic-memory-allocation delete-operator

3
推荐指数
1
解决办法
106
查看次数

位操作AND

这是一个leetcode问题.给定一组数字nums,其中恰好两个元素只出现一次而所有其他元素恰好出现两次.找到只出现一次的两个元素.

例如:给定nums = [1,2,1,3,2,5],返回[3,5].我的代码是:

class Solution {
public:
vector<int> singleNumber(vector<int>& nums) {
int axorb=0;
    for(auto i:nums) axorb=axorb^i;
    int differbit=(axorb&(axorb-1))^axorb;
    int group3=0, group5=0;
    for(auto i:nums)
Run Code Online (Sandbox Code Playgroud)

if(differbit&i!=0) group5=group5^i;

        else group3=group3^i;
        return vector<int>{group3,group5};

}
};
Run Code Online (Sandbox Code Playgroud)

提交结果是错误的答案.

Input:[0,0,1,2]
Output:[3,0]
Expected:[1,2]
Run Code Online (Sandbox Code Playgroud)

但如果我只是将突出显示的部分更改为

if(differbit&i) group5=group5^i;
Run Code Online (Sandbox Code Playgroud)

它被接受了.我花了很多时间思考但仍然不知道.也许某种类型转换发生了?谢谢

c++ bit

3
推荐指数
1
解决办法
80
查看次数