给出以下代码片段:
int sum = 0;
for (int i = 1; i <= N; i++)
for (int j = 1; j <= i*i; j++)
for (int k = 1; k <= j*j; k++)
sum++;
Run Code Online (Sandbox Code Playgroud)
我的假设:
因此,总运行时间应为O(N ^ 5),对吧?
对于这类问题,有一个简单的迭代解决方案.
Node Insert(Node head,int data) {
Node newNode = new Node();
newNode.data = data;
if (head == null) {
return newNode;
}
Node current = head;
while (current.next != null) {
current = current.next;
}
current.next = newNode;
return head;
}
Run Code Online (Sandbox Code Playgroud)
它工作得很好.但我想学习递归并用这种观点看待事物.因此我想出了下面的解决方案,看起来很优雅,但我不得不承认这只是直觉和给定的代码有效.我想开发一个用于递归的心理模型,或者至少某种方式来验证我的代码是否正常工作.如何从理论上验证以下解决方案是否有效.
递归版
Node Insert(Node head,int data) {
// Base case.
if (head == null) {
Node newNode = new Node();
newNode.data = data;
return newNode;
}
// Smaller problem instance.
head.next = Insert(head.next, data);
return head;
}
Run Code Online (Sandbox Code Playgroud) 我在这里读到,对于无向图,空间复杂度是O(V + E)
用邻接表表示的,其中V
和E
分别是顶点和边的数量。
我的分析是,对于完全连接的图,列表的每个条目都将包含|V|-1
节点,那么我们总共有|V|
顶点,因此,空间复杂性O(|V|*|V-1|)
似乎O(|V|^2)
是我在这里缺少的东西?
我对这被认为是一种好习惯感到困惑 - 这种决策语言是否依赖?假设我有以下Java代码:
public class Stack {
public Integer pop() {
if (isEmpty()) return null; // or some exception maybe?
// else get and return the top item in the stack.
};
}
}
Run Code Online (Sandbox Code Playgroud)
该pop
方法的客户端需要一些Integer
值,那么让客户端知道堆栈为空的最佳方法是什么?
我最近一直在阅读域驱动设计,但我很少在 web 应用程序中看到它(或者我可能没有 google 它),我认为我们现在也有足够的复杂性来处理 web 应用程序。
我需要一种方法来保持我的模型和业务逻辑干净、耦合最少、与框架/库无关。例如,今天我使用的是 AngularJS,明天我可能会将 UI 切换到 ReactJS。
话虽如此,我正试图通过一个简单的例子来学习这一点。假设我正在尝试创建具有以下功能的 Quote 应用程序:
给出报价
给定一个用户
未登录时:
登录时:
我对如何在保持 UI 和业务逻辑清洁和分离方面实现上述要求感兴趣。
我不是专家,但目前我可以满足这些要求,这些要求将来可能会发生变化。
我一直以为那个对象的JavaScript是简单的键值对,即哈希表,但看完后,这个文章我很困惑.
作者特别说:
当你使用一个对象就好像它是一个哈希表时,它将变成一个哈希表.
那么,以前到底是怎么回事?特别是整个段落让我困惑.有人能说清楚吗?
algorithm ×2
java ×2
javascript ×2
architecture ×1
graph ×1
performance ×1
recursion ×1
refactoring ×1
v8 ×1
web ×1