diff --git a/R/myunion.R b/R/myunion.R index e359aa5..9d64098 100644 --- a/R/myunion.R +++ b/R/myunion.R @@ -1,32 +1,31 @@ myunion <- function(A, B) { - stop("needs translation") - # function C = myunion(A,B) - # % MYUNION Union of two sets of positive integers (much faster than built-in union) - # % C = myunion(A,B) + # MYUNION Union of two sets of positive integers (much faster than built - in union) + # C <- myunion(A, B) - # if isempty(A) - # ma = 0; - # else - # ma = max(A); - # end + if (is.null(A)) { + ma <- 0 + } else { + ma <- max(A) + } - # if isempty(B) - # mb = 0; - # else - # mb = max(B); - # end + if (is.null(B)) { + mb <- 0 + } else { + mb <- max(B) + } - # if ma==0 & mb==0 - # C = []; - # elseif ma==0 & mb>0 - # C = B; - # elseif ma>0 & mb==0 - # C = A; - # else - # %bits = sparse(1, max(ma,mb)); - # bits = zeros(1, max(ma,mb)); - # bits(A) = 1; - # bits(B) = 1; - # C = find(bits); - # end + if (ma == 0 & mb == 0) { + C <- vector() + } else if (ma == 0 & mb > 0) { + C <- B + } else if (ma > 0 & mb == 0) { + C <- A + } else { + # bits <- sparse(1, max(ma, mb)) + bits <- zeros(1, max(c(ma, mb))) + bits[A] <- 1 + bits[B] <- 1 + C <- find(bits) + } + return(C) }