假设我写,
int a = 111;
int b = 509;
int c = a * b;
Run Code Online (Sandbox Code Playgroud)
那么计算'a*b'的时间复杂度是多少?如何执行乘法运算?
问题在于特殊字符的位置(例如:'?',',','','.')应保持不变.所以对于输入字符串"Hello World,你好吗?" 输出将是"你是,世界你好?".现在对于没有特殊字符的字符串,O(n)算法是反转每个字然后反转整个数组,但是没有考虑特殊字符.
我想出的最好的算法如下.我们遍历数组并将每个单词推到堆栈顶部,然后将特殊字符排入队列.然后,我们同时从堆栈和队列中弹出元素并将它们连接起来以形成所需的输出.
是否有就地O(n)算法?如果没有,你能否建议一个没有额外空间的O(n ^ 2)算法.还假设,您不能使用任何字符串库函数.
#include<iostream>
using namespace std;
class X
{
int a;
int b;
public:
void f(int a)
{
cout<<"\nInside X";
}
virtual void abc ()
{
cout<<"\nHello X";
}
};
class Y : public X
{
int a;
public:
void f(int a, int b)
{
cout<<"\nInside Y";
}
void abc()
{
cout<<"\nHello Y";
}
};
int main()
{
X a;
cout<<sizeof(X);
Y b;
cout<<sizeof(Y);
X *h = new Y;
h->abc();
}
Run Code Online (Sandbox Code Playgroud)
我理解类X的大小是12个字节的原因是因为它包含一个到虚拟表的vptr(虚拟指针).无论如何我可以读取这个虚拟表,如果没有,至少可以访问虚拟指针.我尝试过使用工会,但它给了我一些错误.
另外,当我调用h-> abc()时,它如何知道类的对象,h指向?我认为大部分都是在编译时完成的.但是当你有一个指向派生类的基类指针时,它如何知道要执行哪个类函数.考虑这两种情况
X *h = new X;
h->abc();/* …Run Code Online (Sandbox Code Playgroud) 我试图理解线程如何在Java中工作.因此,我写了一小段代码,通过我创建两个线程,一个打印所有奇数和其他打印偶数,并尝试在它们之间进行同步,以便按顺序打印所有数字.
public class Main
{
public static void main (String args[]){
Main lock = new Main();
Test t1 = new Test(1, lock);
Test t2 = new Test(2, lock);
synchronized(lock){
(new Thread(t1)).start();
(new Thread(t2)).start();
}
}
}
Run Code Online (Sandbox Code Playgroud)
public class Test implements Runnable {
int n;
Main lock;
public Test(int newN, Main lockObj){
this.n = newN;
this.lock = lockObj;
}
public void run() {
while(true){
if (n != 1){
try {
lock.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
n = …Run Code Online (Sandbox Code Playgroud)