Why don’t you use a fat-free $wpdb->get_var() for the task?
global $wpdb;
$ID = $wpdb->get_var("SELECT `ID` FROM {$wpdb->posts}
WHERE `post_type`='post' AND `post_status`='publish'
ORDER BY `post_date_gmt` DESC LIMIT 1;");
$post = $ID ? get_post($ID) : null; // Now get the actual post
This is way more efficient and light-weight. Without all the bells and whistles of the get_posts() or WP_Query().
Regards.
UPDATE: (more in context)
function get_last_published_post(){
global $wpdb;
// Get the ID of the last published post (by date)
$ID = $wpdb->get_var("SELECT `ID` FROM {$wpdb->posts}
WHERE `post_type`='post' AND `post_status`='publish'
ORDER BY `post_date_gmt` DESC LIMIT 1;");
return $ID ? get_post($ID) : null; // Now get the actual post
}
// Should print out the Post object
var_dump(get_last_published_post());