If you know the field you want to examine at compile-time, then you can get the describe information for that field directly.
If this is more dynamic, and you don't know which field to examine until run-time, then there's no way around needing to get the field map from the
DescribeSObjectResult, though since you can get a
Map<String, DescribeFieldResult> (the keys are API names) you can simply get the specific field you're looking for.
If you have an instance of an SObject with the target relationship field populated, you can use that Id to get at the SObject type