可能重复:
C中的滚动中值算法
鉴于从数据流中读取整数.到目前为止,以有效的方式查找元素的中位数.
解决方案我已经读过:我们可以使用左侧的最大堆来表示小于有效中位数的元素,在右侧使用最小堆来表示大于有效中位数的元素.
在处理传入元素之后,堆中元素的数量最多相差1个元素.当两个堆包含相同数量的元素时,我们发现堆的根数据的平均值为有效中值.当堆不平衡时,我们从包含更多元素的堆的根中选择有效中值.
但是我们如何构建最大堆和最小堆,即我们如何知道这里的有效中位数呢?我认为我们会在max-heap中插入1个元素,然后在min-heap中插入下一个元素,依此类推所有元素.纠正我如果我错在这里.
为了找到未排序数组的中位数,我们可以在O(nlogn)时间内为n个元素创建一个最小堆,然后我们可以逐个提取n/2个元素来获得中值.但这种方法需要O(nlogn)时间.
我们可以在O(n)时间内通过某种方法做同样的事情吗?如果可以的话,请告诉或建议一些方法.
int *p=(int * )malloc(sizeof(int));
delete p;
Run Code Online (Sandbox Code Playgroud)
当我们使用malloc分配内存时,我们应该使用free释放它,当我们在C++中使用new分配时,我们应该使用delete释放它.
但是如果我们使用malloc分配内存然后使用delete,那么应该会有一些错误.但是在上面的代码中,C++中没有错误或警告.
此外,如果我们使用new进行反向和分配并使用free进行释放,那么也没有错误或警告.
为什么会这样?
在调用例程之前不会加载例程.所有例程都以可重新定位的加载格式保存在磁盘上.主程序被加载到内存中并被执行.这称为动态链接.
为什么这称为动态链接?不应该是动态加载,因为在动态加载中调用Routine之前不会加载,因为在动态链接中,链接推迟到执行时间.
我有一个n元素数组,其中只有一个元素不重复,否则所有其他数字重复> 1次.并且对阵列中的数字范围没有限制.
一些解决方案是:
O(nlogn),然后找到不重复的元素有更好的解决方案吗?
无向图有'n'个顶点和0个边.我们可以绘制的最大边数可以使图形保持断开状态.
我已经做出了解决方案,我们可以排除一个顶点,并且可以找到无向图的n-1个顶点之间的最大边数,这样图形仍然保持断开状态.n个顶点为n(n-1)/ 2,n-1个顶点为(n-1)(n-2)/ 2可以有更好的解吗?
Find the nth most frequent number in array.
(There is no limit on the range of the numbers)
Run Code Online (Sandbox Code Playgroud)
我想我们可以
(i)使用C++中的地图存储每个元素的出现
(ii)在元素的出现(或频率)的线性时间内构建最大堆,然后提取到第N个元素,每次提取需要log(n)时间来进行堆积.
(iii)我们将获得第N个最常见数字的频率
(iv)然后我们可以通过哈希进行线性搜索,找到具有该频率的元素.
时间 - O(NlogN)空间 - O(N)
有没有更好的方法?
计算长度为n的字符串长度为4的子序列,可以被9整除.
例如,如果输入字符串是9999,则cnt = 1
我的方法与Brute Force类似,需要O(n ^ 3).比这更好的方法?
鉴于代码:
class A{};
class B : public virtual A{};
class C : public virtual A{};
class D : public B,public C{};
int main(){
cout<<"sizeof(D)"<<sizeof(D);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出:sizeof(D)8
每个类都包含它自己的虚拟指针,而不是它的任何基类,那么,为什么类(D)的大小是8?
假设我们有一个班级
class Egg
{
static Egg e;
int i;
Egg(int ii):i(ii) {}
Egg(const Egg &); //Prevents copy-constructor to be called
public:
static Egg* instance() {return &e}
};
Egg Egg::e(47);
Run Code Online (Sandbox Code Playgroud)
此代码保证我们不能创建任何对象,但只能使用静态对象.但是我们如何在类中声明同一个类的静态对象.
还有一件事因为e是静态对象,静态对象只能调用静态成员函数,所以如何在静态对象e中调用构造函数,其构造函数也是私有的.