我很好奇为什么有可能这样做(至少在Java 8上如此):
Optional.of(null).orElse("something");
Run Code Online (Sandbox Code Playgroud)
Optional.of(null)
基本上是保证的空指针。使得对其进行调用.orElse()
成为可能,使笨拙的开发人员意外陷入困境。我一直在四处看看是否有任何理由。也许在某些情况下这应该解决?
我需要编写一个 Python 函数,它接受两个只包含小写字母的排序字符串(每个字符串中的字符按字母顺序递增),并检查字符串是否相等。该函数的时间复杂度需要为O(log n)
,其中n
是每个字符串的长度。
如果不将第一个字符串中的每个字符与第二个字符串的并行字符进行比较,我无法弄清楚如何检查它。
我们知道 JVM 调用底层系统来分配内存和 CPU 时间、访问文件等等。它如何在内部工作以实现其活动?
JVM 是否使用系统调用?
我认为 Dijkstra 的算法是确定的,因此如果您选择相同的起始顶点,您将获得相同的结果(到每个其他顶点的距离相同)。但我不认为它是确定性的(它为每个操作定义了以下操作),因为这意味着它首先不必搜索最短距离。
我对么?如果我错了,您能否解释一下为什么它是确定性的,并举个例子?
假设有一个函数X
可以接受任意数量的对象:
export function X<T extends object[]>(...classes: T): MergedClasses<T>;
Run Code Online (Sandbox Code Playgroud)
我希望它返回该列表中每个对象的交集。例如,给定对象A
, B
, C
,D
它会像这样:
let X = A & B
X = X & C
X = X & D
// for any number of objects
Run Code Online (Sandbox Code Playgroud)
但是,我想将其作为函数返回类型的类型(因此MergedClasses
)
type MergedClasses<C extends object[]> = {
}
Run Code Online (Sandbox Code Playgroud)
我知道这是可能的,[K for keyof C]:
但从那里我不确定如何组合对象,因为无法分配变量。
我检查了 Lodash 的合并类型,它只是一个重载函数,需要 1、2、3、4 或 5 个对象。所以看起来它可以合并任意数量的对象,但实际上不能合并超过 5 个。
是否可以动态合并对象,或者我必须采取与 Lodash 相同的路线?
基于《破解编码面试》一书(第 90 页)一书,以下算法需要 O(xn\xc2\xb2) 时间(其中“x”表示字符串的长度,“n”是字符串的数量) )。代码是用Java编写的。有人能解释一下我们如何获得这样的运行时间吗?
\n\nString joinWords(String[] words)\n{\n String sentence = "";\n for(String w : words)\n {\n sentence = sentence + w;\n }\n\n return sentence;\n}\n
Run Code Online (Sandbox Code Playgroud)\n 下面的代码测试二叉树是否平衡。有人告诉我它的运行时间是O(n log n)。
据我了解...
getHeight()
访问每个节点一次,所以它是O(n)。
isBalanced()
调用getHeight()
..然后递归
如果isBalanced()
在所有n个节点上调用if ,并且调用的getHeight()
是O(n),为什么复杂度不是O(n²)?
int getHeight(TreeNode root) {
if (root == null) return -1;
return Math.max(getHeight(root.left), getHeight(root.right)) + 1;
}
boolean isBalanced(TreeNode root) {
if (root == null) return true;
int heightDiff = getHeight(root.left) - getHeight(root.right);
if (Math.abs(heightDiff) > 1)
return false;
else
return isBalanced(root.left) && isBalanced(root.right);
}
Run Code Online (Sandbox Code Playgroud) 从杰夫·埃里克森的讲义上的图形算法,有一个锻炼,以检查是否给定顶点之间的步行路程s
,并t
可以通过3有向图整除。
我的想法是在图上使用广度优先搜索来获取从s
到 的所有路径t
。如果简单路径的长度不能被 3 整除,则再次运行该算法以检查循环长度不能被 3 整除的位置s
和t
位置之间是否存在循环。但是,我觉得该方法非常低效。
如果您对这个问题有任何好的建议,那就太好了。
feColorMatrix
我在画布 2D 渲染上下文中使用 SVG 过滤器。我希望能够动态更新矩阵的values
属性,以动态更改颜色映射。但是,当我使用setAttribute
更新矩阵时,它对画布的后续绘制没有影响。
下面的示例重现了该问题。矩阵最初交换红色和绿色通道,并且正确应用此过滤器,以便左侧的正方形绘制为绿色而不是红色。预期的结果是,将滤镜的values
属性更改为redToBlue
矩阵后,右侧的方块应该绘制为蓝色;实际结果是,尽管更新了矩阵值,右侧的方块仍保持绿色。
let redToBlue = '0 0 1 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 1 0';
let canvas = document.getElementById('canvas');
let ctx = canvas.getContext('2d');
let filter = document.getElementById('filter');
ctx.fillStyle = 'red';
ctx.filter = 'url(#filter)';
ctx.fillRect(10, 10, 80, 80);
filter.setAttribute('values', redToBlue);
ctx.fillRect(110, 10, 80, 80);
Run Code Online (Sandbox Code Playgroud)
<svg>
<filter id="filter">
<feColorMatrix type="matrix" values="0 1 0 0 0 1 0 0 0 …
Run Code Online (Sandbox Code Playgroud)比如用户输入5,输出:99999
我知道我可以使用 for 循环来连接字符串,然后对字符串进行 int 处理,但是这个解决方案似乎无效。
algorithm ×4
java ×4
python ×2
binary-tree ×1
dijkstra ×1
graph-theory ×1
html5-canvas ×1
java-8 ×1
javascript ×1
jvm ×1
optional ×1
python-3.x ×1
string ×1
svg-filters ×1
typescript ×1