R 尋找連續出現1的遊程

2021-06-26 13:30:08 字數 886 閱讀 3666

問題描述:

假設乙個向量由若干0和1 構成,我們想找出其中連續出現1的遊程(在乙個0和1組成的序列中,乙個由連續的0或1構成的串稱為乙個遊程)。。例如,對於向量(1,0,0,1,1,1,0,1,1),從它第4索引處開始有長度為3的遊程,而長度為2的遊程分別始於第4,第5和第8索引的位置。

**如下:

findruns <- function(x, k)

return( runs ) }

測試如下:

> y <- c( 1, 0, 0, 1, 1, 1, 0, 1, 1 )

> findruns( y, 3 )

[1] 4

> findruns( y, 2 )

[1] 4 5 8

> findruns( y, 6 )

null

第五行,我們需要判斷從x[i]開始的連續k個值,即x[i],x[i+1],...,x[i+k-1]的值,是否全部為1。表示式x[i:(i+k-1)]語句給出了上述子向量的值,然後使用all()函式檢驗它是否是乙個遊程。

儘管前面的**中使用all()比較好,但建立向量runs的過程並不理想。向量的記憶體分配過程比較耗時,由於呼叫c(runs,i)時給新的向量分配了記憶體空間,每次執行時都會減慢**的執行速度。

**改進:

findruns1 <- function(x, k) }

if(count > 0)

else

return( runs ) }

在第3行,我們給乙個長度為n的向量分配了記憶體空間。這意味著在執行迴圈的過程中,可以避免分配新的記憶體。第8行**做的只是填充runs。在退出函式之前,我們在第12行重新定義runs,來刪除該向量中沒用的部分。這種方法更好,第一版**可能會有很多次記憶體分配,而第二版**將之減少為兩次。

連續出現的數字

表 logs 編寫乙個 sql 查詢,查詢所有至少連續出現三次的數字。返回的結果表中的資料可以按任意順序排列。查詢結果格式如下面的例子所示 解法一 使用視窗函式的偏差函式完美實現。可以這樣理解 將num複製兩列num1和num2,然後num1整體向上移動一行,num2整體向上移動兩行,如下 所以只要...

連續出現的數字

編寫乙個 sql 查詢,查詢所有至少連續出現三次的數字。id num 1 1 2 1 3 1 4 2 5 1 6 2 7 2 例如,給定上面的 logs 表,1 是唯一連續出現至少三次的數字。consecutivenums 1 write your mysql query statement bel...

Part 1R 函式 極限和連續

begin lim limits x n a leftrightarrow lim limits x lim limits x a lim limits f x a leftrightarrow lim limits f x lim limits f x a lim limits f x a lef...