From 7d265495f58a8b0b563829d3e4dad5ba573041d1 Mon Sep 17 00:00:00 2001 From: Aadhavan Srinivasan Date: Thu, 7 Nov 2024 15:55:13 -0500 Subject: [PATCH] Got rid of list for uniq_arr (O(n) deletion) and instead have separate method to create list (O(n) list creation) --- unique_array.go | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/unique_array.go b/unique_array.go index d9492d0..e03621a 100644 --- a/unique_array.go +++ b/unique_array.go @@ -3,26 +3,37 @@ package main // Unique array data structure type uniq_arr[T comparable] struct { backingMap map[T]struct{} // Map is used to check if element exists - Empty structs occupy zero memory - vals []T } func new_uniq_arr[T comparable]() uniq_arr[T] { return uniq_arr[T]{ make(map[T]struct{}), - make([]T, 0), } } func (s *uniq_arr[T]) add(vals ...T) { for _, item := range vals { if !s.contains(item) { s.backingMap[item] = struct{}{} - s.vals = append(s.vals, item) } } return } -func (s *uniq_arr[T]) contains(val T) bool { +func (s uniq_arr[T]) contains(val T) bool { _, ok := s.backingMap[val] return ok } + +func (s *uniq_arr[T]) delete(val T) { + delete(s.backingMap, val) +} + +func (s uniq_arr[T]) values() []T { + toRet := make([]T, len(s.backingMap)) + i := 0 + for k := range s.backingMap { + toRet[i] = k + i++ + } + return toRet +}