为了构建堆,我们使用 java 中的 PriorityQueue 类。有没有办法使用内置库/类直接从 O(N) 中的数组构建堆,而不是单独推送每个元素以在 O(NlogN) 中构建堆?
#include<stdio.h>
#include<conio.h>
void main()
{
int a[5]={1,2,3,4,5};
int (*p)[5];
int *p1[5];
clrscr();
printf("%d\n",(int)sizeof(a)); // 10
printf("%d\n",(int)sizeof(p)); //2
printf("%d\n",(int)sizeof(p1)); //10
getch();
}
Run Code Online (Sandbox Code Playgroud)
第一个输出是10,因为每个整数是2个字节,因此5个整数将占用10个字节.
我无法理解第3个输出是10.这里我们有指针数组,每个指针指向一个整数.我系统中指针(或地址)的大小是32位(4字节).所以输出应该是5*4 = 20,因为我们有5个指针,每个4个字节?
void main()
{
char *s="ABCDEFG";
clrscr();
int *ptr=(int *)s;
printf("%c %d\n",*(ptr+1),*(ptr+1)); //OP :- C 17475
printf("%c %d\n",*(s+1),*(s+1)); //OP :- B 66
getch();
}
Run Code Online (Sandbox Code Playgroud)
我知道整数指针增加 2 个字节,而字符指针增加 1 个字节。这里当 int 指针增加 1 时,只打印 C(只考虑第一个字节)。是因为我们有 %c 说明符吗?
另外,我无法理解 17475 是如何作为输出打印的。在第二种情况下,66 是 B 的 ASCII 值。
有人能帮我吗?
我有两个疑问: -
1)是(log*n)^ n = O((logn)!)?
2)哪个更大,log(log*n)或log*(logn)?