Cloud computing, an amalgam of existing technologies ranging from distributed computing to cluster computing, to grid computing, to virtualization (which forms the foundation of these technologies) has changed the way organizations use Information and Communication Technology (ICT). Instead of acquiring resources for on-premise ICT departments, these resources are provisioned as service. It usually involves a pool of resources that multiple users can tap into and make use of (in parallel) whenever there is need to. These resources are also provisioned dynamically and are scaled up/down depending on demand. In addition, like any other utility, payment is done on a pay-per-use model thus reducing the huge initial cost of acquiring on-premise IT infrastructure. Since inception, there has been a steady increase in the number of users migrating to the clouds. Based on this increase, there is need to optimally allocate cloud resources so as to ensure that users perceived satisfaction is guaranteed. This work is an exposé on the challenges of resource allocation in cloud computing and works done in order to surmount these challenges. The work further goes on to juxtapose the various resource allocation strategies in order to identify their strengths and weakness based on how well they avoid situations such as resource under provisioning, over provisioning, contention, fragmentation and scarcity.