WP Query get only 1 post (sticky, not sticky etc)

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());