//O(n)