我试图通过将inorder列表转回BST来"反转"inorder遍历.
BST具有谓词形式node(Value,Left,Right)或者leaf,因此空树只是leaf一棵树,一个节点就是node(_,leaf,leaf).
给定谓词enumerate_bst(Elems,Bst),目标是匹配Bstinorder列表的所有可能性Elems.例如(注意setof/3):
?- setof(Bst,enumerate_bst([],Bst),Enum).
Enum = [leaf].
?- setof(Bst,enumerate_bst([1,2],Bst),Enum).
Enum = [
node(1, leaf, node(2, leaf, leaf)),
node(2, node(1, leaf, leaf), leaf)
].
?- setof(Bst,enumerate_bst([1,2,3],Bst),Enum).
Enum = [
node(1, leaf, node(2, leaf, node(3, leaf, leaf))),
node(1, leaf, node(3, node(2, leaf, leaf), leaf)),
node(2, node(1, leaf, leaf), node(3, leaf, leaf)),
node(3, node(1, leaf, node(2, leaf, leaf)), leaf),
node(3, node(2, node(1, leaf, leaf), leaf), leaf) …Run Code Online (Sandbox Code Playgroud) 给定一个数字n,逐位运算n & (n - 1)总是产生一个距离 1 位的数字n。以下是一些示例:
n = 4 => b'100' & b'011' = b'000'
n = 5 => b'101' & b'100' = b'100'
n = 6 => b'110' & b'101' = b'100'
Run Code Online (Sandbox Code Playgroud)
换句话说,n & (n - 1)总是从 中清除 1 位n。为什么是这样?有人可以提供证明吗?
假设我有一个 go 接收通道。有没有一种方法可以让我同时收听所有内容?例如:
channels := make([]<-chan int, 0, N)
// fill the slice with channels
for _, channel := range channels {
<-channel
}
Run Code Online (Sandbox Code Playgroud)
这是我能做到的最接近的事情。但是,此实现取决于切片元素的顺序。
为了清楚起见,我不需要知道 go 通道的值。我只需要知道他们都完成了。
我想从git submodule status <PATH>我的子模块的 SHA-1 提交哈希中进行 grep 。根据git submodule --help:
状态 [--缓存] [--递归] [--] [...]
显示子模块的状态。这将打印每个子模块当前签出的提交的 SHA-1,以及 SHA-1 的子模块路径和 git 描述的输出。如果子模块未初始化,则每个 SHA-1 可能会以 - 为前缀;如果当前签出的子模块提交与包含存储库的索引中找到的 SHA-1 不匹配,则以 + 为前缀;如果子模块存在合并冲突,则每个 SHA-1 可能会以 U 为前缀。
所以结果看起来像这样:
f1eeb6aa2a5009b5ef68b5b754499dcb3ab575d1 my-submodule (remotes/origin/HEAD)
Run Code Online (Sandbox Code Playgroud)
描述提到每个哈希可能会以 a+或 a为前缀-。我对这些符号不感兴趣,因此,无论它给我什么结果,我都想获得不带前缀的 40 个字符的哈希值。
例子:
input: +f1eeb6aa2a5009b5ef68b5b754499dcb3ab575d1 my-submodule (remotes/origin/HEAD)
desired output: f1eeb6aa2a5009b5ef68b5b754499dcb3ab575d1
input: f1eeb6aa2a5009b5ef68b5b754499dcb3ab575d1 my-submodule (remotes/origin/HEAD)
desired output: f1eeb6aa2a5009b5ef68b5b754499dcb3ab575d1
Run Code Online (Sandbox Code Playgroud)
我已经尝试过类似的方法awk '{print $1;}' | grep -e '[0-9a-f]\{40\}',但它似乎没有删除前缀。有什么优雅的解决方案吗?
我有以下 Go 结构:
type Bar struct {
Stuff string `db:"stuff"`
Other string `db:"other"`
}
type Foo struct {
ID int `db:"id"`
Bars []*Bar `db:"bars"`
}
Run Code Online (Sandbox Code Playgroud)
所以Foo包含一个Bar指针切片。我在 Postgres 中还有以下表格:
CREATE TABLE foo (
id INT
)
CREATE TABLE bar (
id INT,
stuff VARCHAR,
other VARCHAR,
trash VARCHAR
)
Run Code Online (Sandbox Code Playgroud)
我想LEFT JOIN在 table 上bar并将其聚合为一个数组以存储在 struct 中Foo。我试过了:
SELECT f.*,
ARRAY_AGG(b.stuff, b.other) AS bars
FROM foo f
LEFT JOIN bar b
ON f.id = …Run Code Online (Sandbox Code Playgroud) 我觉得奇怪的是我找不到这些信息,所以如果可能的话,请把我指向一个可靠的来源。此问题仅与 Java 相关。
简而言之,我想知道依赖注入实际上是如何在语法上发生的。
我对依赖注入的理解如下:
public class Car {
private Engine engine
@Inject
public Car(Engine engine) {
this.engine = engine
}
}
Run Code Online (Sandbox Code Playgroud)
是否相当于
public class Car {
private Engine engine
public Car(Engine engine) {
this.engine = engine
}
}
Run Code Online (Sandbox Code Playgroud)
其中关键字@Inject是语法糖,让 Java 知道engine要注入依赖项。这样,Car将不负责创建engine,因此具有硬的依赖Engine。但是,没有示例向我展示如何注入它。简而言之:
public MyClass {
public static void main(String[] args) {
ToyotaEngine toyotaEngine = new ToyotaEngine();
HondaEngine hondaEngine = new HondaEngine();
// ??? which …Run Code Online (Sandbox Code Playgroud) id考虑已按时间戳分组并按降序排序的关注窗口。
| ID | 时间戳 | 瓦尔 |
|---|---|---|
| 富 | 10:50 | 无效的 |
| 富 | 10:40 | A |
| 富 | 10:30 | A |
| 富 | 10:20 | 无效的 |
| 富 | 10:10 | 无效的 |
| 富 | 10:00 | 乙 |
| 富 | 9:50 | C |
| 富 | 9:40 | 无效的 |
| 富 | 9:30 | d |
| 富 | 9:20 | 无效的 |
假设val一旦出现不同的值,a就不会再次出现。也就是说,我不会出现,a,b,a但a,null,a可能会出现。我想针对val未NULL见过或以前见过的条件生成滚动计数。也就是说,我想要这样的东西:
| ID | 时间戳 | 瓦尔 | 数数 |
|---|---|---|---|
| 富 | 10:50 | 无效的 | 0 |
| 富 | 10:40 | A | 1 |
| 富 | 10:30 | A | 1 |
| 富 | 10:20 | 无效的 | 1 |
| 富 | 10:10 | A | 1 |
| 富 | 10:00 | 乙 | 2 |
| 富 | 9:50 | C | 3 |
| 富 | 9:40 … |
新的C++和下面的初学者的教程在这里.请参阅标题为C++中的随机数的部分.准确使用给出的代码:
#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;
int main () {
int i,j;
// set the seed
srand( (unsigned)time( NULL ) );
/* generate 10 random numbers. */
for( i = 0; i < 10; i++ ) {
// generate actual random number
j = rand();
cout <<" Random Number : " << j << endl;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我播种srand()用time()(编译g++)等所产生的结果应该是完全随机的.但是,这是我得到的结果:
$ ./a.out
Random Number : 1028986599 …Run Code Online (Sandbox Code Playgroud)