我是一个很长时间的潜伏者,只是接受了谷歌的采访,他们问我这个问题:
各种艺术家都想在皇家阿尔伯特音乐厅演出,你负责安排他们的音乐会.在大厅表演的要求按照先到先得的政策进行.每天只能进行一次演出,此外,不能在5天内举行任何音乐会
给定一个不可能的请求时间d(即在已经计划的性能的5天内),给出O(log n)时间算法以找到下一个可用日d2(d2> d).
我不知道如何解决它,现在面试已经结束,我很想知道如何解决它.知道你们大多数人的聪明才智,我想知道你能否在这里帮助我.这不是作业,或任何类似的东西.我只是想学习如何解决它以便将来的采访.我试着提出跟进问题,但他说这就是我可以告诉你的全部内容.
设计一个支持n元素集上的以下操作的数据结构:
O(lg n)O(1)时间.请注意,删除max占用O(lg n)传统堆.我的方法:
我决定保留一个单独的数组,它将跟踪将超越根的潜在后继者(这是最大堆中的最大值); 一旦删除.因此,如果你删除max,O(1)我将在我的数组中查找下一个合适的后继者(我假设我将智能地设置).
有人有更好的方法吗?尽量坚持使用堆.这不是一个家庭工作的问题,我正在准备面试,而且它来自Skiena的书.
所以我在这里有代码,我期望它严格运行ls -l 5次,但它似乎运行的次数要多得多.我在这做错了什么?我想要运行ls 5次,所以我分叉了5次.也许我不理解等待的概念?我经历了大量的教程,似乎没有人能彻底解决使用fork的多个进程.
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
int main()
{
pid_t pidChilds[5];
int i =0;
for(i = 0; i<5; i++)
{
pid_t cpid = fork();
if(cpid<0)
printf("\n FORKED FAILED");
if(cpid==0)
printf("FORK SUCCESSFUL");
pidChilds[i]=cpid;
}
}
Run Code Online (Sandbox Code Playgroud) 因此,对于键盘上的向上键,我得到27,令人惊讶的是,对于向下键我也得到27.我需要我的程序在向上和向下键上表现不同,我似乎无法弄明白.我正在使用Linux,需要它才能用于Linux.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
int main()
{
int c = getchar();
if(c==27)
{
printf("UP");
}
if(c==28)
{
printf("DOWN");
}
}
Run Code Online (Sandbox Code Playgroud) 我可以解析输入,在历史中上下遍历,但我的退格不起作用.这是为什么?
void printPrompt(void)
{ // prints working directory prompt
char cwd[256];
getcwd(cwd, 255);
printf("%s> ", cwd);
fflush(stdout);
}
Run Code Online (Sandbox Code Playgroud)