我已经尝试解决这个问题很久了,但我似乎无法解决。
问题如下:
给定一个数组 n 个数字,其中所有数字都出现两次,除了一个只出现一次,找出只出现一次的数字。
现在,我在网上找到了很多解决方案,但没有一个满足问题的额外限制。
解决方案应该:
因此,使用 XOR 运算符尝试类似/sf/answers/334079791/的操作是不可能的,因为我们没有 XOR 运算符。由于每个数字的位数大约为 O(log(n)),尝试使用普通算术(逐位)实现 XOR 运算符将需要大约 O(log(n)) 个动作,这将给我们一个整体O(nlog(n)) 的解。
我最接近解决它的是,如果我有办法在线性时间内获得数组中所有唯一值的总和,我可以从总和中减去该总和的两倍以获得(负)仅出现一次的元素的,因为如果出现两次的数字是{A1,A2,...,AK},而出现一次的数量为x时,则整体的总和为
总和= 2(A1 + ... + AK)+ X
就据我所知,集合是使用哈希表实现的,因此使用它们来查找所有唯一值的总和是不好的。
我最近打开了Wamp服务器很长一段时间后我没碰到它.当时很好,但是当我现在尝试打开Wamp服务器时,我收到一条错误消息
应用程序无法正确启动(0xc0000142).
此外,wamp图标为橙色,而当时则为绿色.
我试图在互联网上搜索解决方案,但我无法找到.
我还注意到,当我尝试打开phpMyAdmin时,该页面显示
#2002 - 无法建立连接,因为目标计算机主动拒绝它.服务器没有响应(或未正确配置本地服务器的套接字)
但是我可以打开我的localhost开始页面(带有加载的扩展列表的页面).
谢谢你的帮助.
我尝试将我自己的字符串类用于学习目的,但我遇到了一个小问题.
我在我的String类中创建了一个char指针成员(并且堆在构造函数中分配了它).我也在解构器中删除了[]它,我注意到在试图退出main方法后控制台卡住了.
#include <iostream>
class String {
char *str;
public:
String() {}
String(const char *s) {
size_t len = strlen(s);
str = new char[len];
for (size_t i = 0; i < len; i++)
str[i] = s[i];
str[len] = '\0'; // null terminate
}
~String() { delete[] str; }
};
int main() {
String s("12");
} // <-- Program gets stuck here while trying to exit. Notice that when
// I remove the delete[] in the deconstructor, the program runs fine. …Run Code Online (Sandbox Code Playgroud)