✅ C++ | No Tension | Pure Standard Binary Search | Most intuitive | very clean
Runtime : 7ms\nClean and very simple \n\nExplanation : \n1. If the nums[mid] is in the left hand side,  then it must be greater than the smallest number in the 
**Runtime : 7ms**\nClean and very simple \n\n**Explanation :** \n1. If the `nums[mid]` is in the **left hand side**,  then it must be greater than the smallest number in the left hand side, i.e. `nums[0]`. That is `nums[0] <= nums[mid]`. Then we know the minimum number must in the `right side` of mid. So move `low` to `mid + 1`\n\n2. If the `nums[mid]` is in the **right hand side**, then it must be no greater than the smallest number in the left hand side, i.e. `nums[0]`. That is `nums[0] > nums[mid]`. Then we know the minimum number must in the `left side of mid`. So move `high` to `mid-1`.\n\n**Dry run on below 2 test cases, after this you will be crystal clear with my approach**\nEx.1\n`Input: nums = [4,5,6,7,0,1,2]`\n`Output: 0`\n\nEx.2\n`Input: nums = [2,1]`\n`Output: 1`\n\n```\nclass Solution {\npublic:\n    int findMin(vector<int>& nums) {\n        \n\t\t// corner case\n\t\tif(nums.size()==1) return nums[0];\n\t\n        // If the array is already sorted then return first element\n        if(nums[0] < nums[nums.size()-1])\n            return nums[0];\n        \n       // Find the Pivot element\n        int low=0;\n        int high=nums.size()-1;\n        \n        while(low<=high)\n        {\n            int mid=low+(high-low)/2;\n            if(nums[0] <= nums[mid]) \n            {\n                low=mid+1;\n            }\n            else\n            {\n                high=mid-1;\n            }\n        }\n        return nums[low];\n    }\n};\n```\n*Thanks for upvoting !*
['Binary Search', 'C', 'C++']