The original code may be correct as it is. Judging from the context, f1() is returning a pointer to an array of doubles. Arrays returned by new[] should be freed by delete[]. f2() appears to be returning a pointer to a single vector, which may contain many doubles. A single vector, regardless of how many elements it contains, should be deleted with delete if it was allocated by new.
Your suggestion would only be correct if f1() returns a pointer to a single double and f2() returns a pointer to an array of vectors of doubles, which I think is less likely.
What if the highest value of f2 is in the third element ([3]) and we have a double* f_high and want to save that third element into that f_high? what code would we use for that please?