我似乎记得F#的旧版本允许在匹配序列时进行结构分解,就像列表一样.有没有办法在保持序列延迟的同时使用列表语法?我希望避免大量调用Seq.head和Seq.skip 1.
我希望有类似的东西:
let decomposable (xs:seq<'a>) =
match xs with
| h :: t -> true
| _ -> false
seq{ 1..100 } |> decomposable
Run Code Online (Sandbox Code Playgroud)
但这仅处理列表并在使用序列时给出类型错误.当使用List.of_seq时,它似乎会评估序列中的所有元素,即使它是无限的.
在长度为n的序列中,其中n = 2k + 3,即有k个唯一数字出现两次,并且三个数字仅出现一次.
问题是:如何找到仅出现一次的三个唯一数字?
例如,在顺序1 1 2 6 3 6 5 7 7中,三个唯一数字是2 3 5.
注意:3 <= n <1e6,数字范围为1到2e9
内存限制:1000KB,这意味着我们无法存储整个序列.
方法我试过(内存限制超过)?
我初始化一个树,当读入一个数字时,我尝试将其从树中删除,如果remove返回false(未找到),我将它添加到树中.最后,树有三个数字.它工作,但内存限制超过.
我知道如何使用位操作找到一个或两个这样的数字.所以我想知道是否
我们可以找到三个使用相同的方法(或一些类似的方法)?
找到一个/两个数字的方法只出现一次:
如果只有一个数字出现一次,我们可以对序列应用XOR来找到它.
如果有两个,我们可以先对序列应用XOR,然后将序列分成2个部分,结果为1,然后再将XOR应用于2个部分,我们将找到答案.
比方说,我们有一个列表/正整数数组x1,x2,...,xn.我们可以对这个序列进行连接操作,这意味着我们可以用一个元素替换两个彼此相邻的元素,这是这些元素的总和.例如:
- > array/list:[1; 2; 3; 4; 5; 6]
主要问题是找到给定序列的最小连接操作,之后该序列将按递增顺序排序.
注:空和一个元素序列都在增加顺序排序.
基本示例:
对于[4; 6; 5; 3; 9]解决方案是1(我们加入 5和3)
对于[1; 3; 6; 5]解决方案也是1(我们加入 6和5)
我正在寻找的是一种解决这个问题的算法.它可以是伪代码,C,C++,PHP,OCaml或类似的(我的意思是:如果你用其中一种语言编写解决方案,我会理解解决方案).
我需要一个类似的函数Seq.head,但是None当序列为空时返回而不是抛出异常,即seq<'T> -> 'T option.
有很多方法可以做到这一点.这里有几个:
let items = Seq.init 10 id
let a = Seq.tryFind (fun _ -> true) items
let b = Seq.tryPick Some items
let c = if Seq.isEmpty items then None else Some (Seq.head items)
let d =
use e = items.GetEnumerator()
if e.MoveNext() then Some e.Current
else None
Run Code Online (Sandbox Code Playgroud)
b是我使用的那个.两个问题:
Seq.tryHead函数,这是否表明这不是必需的,是不常见的,或者在没有函数的情况下更好地实现?tryHead已添加到F#4.0的标准库中. 我有以下代码:
@Entity
@Table(name = "my_table", schema = "my_schema")
@SequenceGenerator(name = "my_table_id_seq", sequenceName = "my_table_id_seq",
schema = "my_schema")
public class MyClass {
@Id
@GeneratedValue(generator = "my_table_id_seq",
strategy = GenerationType.SEQUENCE)
private int id;
}
Run Code Online (Sandbox Code Playgroud)
数据库:Postgresql 8.4,Hibernate注释3.5.0-最终版.
保存MyClass的对象时,它会生成以下SQL查询:
select nextval('my_table_id_seq')
Run Code Online (Sandbox Code Playgroud)
因此没有模式前缀,因此无法找到序列.当我写sequenceName之类的时候
sequenceName = "my_schema.my_table_id_seq"
Run Code Online (Sandbox Code Playgroud)
一切正常.
我对架构参数的含义有误解吗?还是一个错误?任何想法如何使架构参数工作?
ruby中有一个简单的函数来创建序列吗?例如,我想要一个从1增加到100的序列,增加3
Function(1,100,increment = 3) = [1,4,7,10, ...,97,100]
Run Code Online (Sandbox Code Playgroud)
谢谢!
我有以下代码,它增加了向量中每对的第一个元素:
(vec (map (fn [[key value]] [(inc key) value]) [[0 :a] [1 :b]]))
Run Code Online (Sandbox Code Playgroud)
但是我担心这个代码不够优雅,因为它首先使用map创建一个序列,然后将其转换回矢量.
考虑这个类比:
(into [] (map (fn [[key value]] [(inc key) value]) [[0 :a] [1 :b]]))
Run Code Online (Sandbox Code Playgroud)
在#clojure@irc.freenode.net上有人告诉我,使用上面的代码是不好的,因为into扩展到了(reduce conj [] (map-indexed ...)),在这个过程中产生了许多中间对象.然后我被告知实际上into并没有扩展到(reduce conj ...)可能的时候使用瞬态.同时测量经过的时间显示into实际上比...更快vec.
所以我的问题是:
map矢量的正确方法是什么?vec和into向量时,下面会发生什么?相关但不重复的问题:
我对R(以及一般的编程)非常陌生,并且我已经坚持这个(可能非常简单)问题几天了......
如何3 6 12 24 48 96 192 384 768用for循环制作矢量?
到目前为止,我设法提出的所有内容都是:
x=numeric()
for (i in 1:8) (x=2*i[-1])
Run Code Online (Sandbox Code Playgroud)
但是,这不起作用.我认为其中一个主要问题是我不明白如何索引序列中的数字.
如果有人能指出我正确的方向,那将是一个很大的帮助!
我找不到解决这个问题的方法.
输入输出序列如下:
**input1 :** aaagctgctagag
**output1 :** a3gct2ag2
**input2 :** aaaaaaagctaagctaag
**output2 :** a6agcta2ag
Run Code Online (Sandbox Code Playgroud)
输入序列可以是10 ^ 6个字符,并且将考虑最大的连续模式.
例如,对于input2"agctaagcta"输出将不是"agcta2gcta",但它将是"agcta2".
任何帮助赞赏.
我想在H2数据库中创建一个表.如何指定应从已创建的序列生成主键?
该序列称为group_seq,我使用以下语句创建它:
CREATE SEQUENCE GROUP_SEQ;
Run Code Online (Sandbox Code Playgroud)
因此,当我创建表时,如何指定我希望我的主键col(ID)使用该序列?