leetcode 二分题 C++实现
2021/7/11 17:05:52
本文主要是介绍leetcode 二分题 C++实现,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
把数组分成三个区间,[left,mid-1] mid [mid+1,right],使用这种写法通常的情况是要找的元素的性质比较简单,直接。
704. 二分查找
简单题
时间复杂度o(logn),空间复杂度o(1)
class Solution { public: int search(vector<int>& nums, int target) { int left=0,right=nums.size()-1; while(left<=right) { int mid=(left+right)/2; if(target>nums[mid]) { left=mid+1; } else if(target<nums[mid]) { right=mid-1; } else { return mid; } } return -1; } };
633. 平方数之和
中等题
时间复杂度o(sqrt(c)),空间复杂度o(1)
class Solution { public: bool judgeSquareSum(int c) { long long left = 0, right = sqrt(c); while(left <= right) { if((left * left + right * right) == c) { return true; } else if((left * left + right * right) < c) { left++; } else { right--; } } return false; } };
把数组分成两个区间[left,mid] [mid+1,right]或[left,mid-1] [mid,right],把区间分成“一定不存在目标元素的区间”和“可能存在目标元素的区间”,适合于比较复杂的题目。
35. 搜索插入位置
简单题
时间复杂度o(logn),空间复杂度o(1)
class Solution { public: int searchInsert(vector<int>& nums, int target) { if(target > nums[nums.size() - 1]) { return nums.size(); } int left = 0, right = nums.size() - 1; while(left < right) { int mid = left + (right - left) / 2; if(nums[mid] < target) { left = mid + 1; } else { right = mid; } } return left; } };
参考资料:
写对二分查找不能靠模板,需要理解加练习 (附练习题,持续更新)
这篇关于leetcode 二分题 C++实现的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-23新能源车企如何通过CRM工具优化客户关系管理,增强客户忠诚度与品牌影响力
- 2024-12-23原创tauri2.1+vite6.0+rust+arco客户端os平台系统|tauri2+rust桌面os管理
- 2024-12-23DevExpress 怎么实现右键菜单(Context Menu)显示中文?-icode9专业技术文章分享
- 2024-12-22怎么通过控制台去看我的页面渲染的内容在哪个文件中呢-icode9专业技术文章分享
- 2024-12-22el-tabs 组件只被引用了一次,但有时会渲染两次是什么原因?-icode9专业技术文章分享
- 2024-12-22wordpress有哪些好的安全插件?-icode9专业技术文章分享
- 2024-12-22wordpress如何查看系统有哪些cron任务?-icode9专业技术文章分享
- 2024-12-21Svg Sprite Icon教程:轻松入门与应用指南
- 2024-12-20Excel数据导出实战:新手必学的简单教程
- 2024-12-20RBAC的权限实战:新手入门教程