leetcode--二分查找和二分排序
来源:互联网 发布:淘宝话费充值店赚钱吗 编辑:程序博客网 时间:2024/06/07 19:51
基础知识
二分查找(递归)代码
#include <vector>using namesape std;bool binary_search(vector<int> &sort_array,int begin, int end, int target){ if(begin>end){ return false; } int mid=(begin+end)/2; if(target==sort_array[mid]){ return true; } else if(target<sort_array[mid]){ return binary_search(sort_array,begin,mid-1,target); } else if(target>sort_array[mid]){ return binary_search(sort_array,mid+1,end,target); }}
二分查找(循环)代码
bool binary_search(std::vector<int> &sort_array, int target){ int begin = 0; int end = sort_array.size() - 1; while(begin <= end){ int mid = (begin + end) / 2; if (target == sort_array[mid]){ return true; } else if (target < sort_array[mid]){ end = mid - 1; } else if (target > sort_array[mid]){ begin = mid + 1; } } return false;}
leetcode题目
35. Search Insert Position
题意:
给出一个递增序列,和一个target数字,找到这个数字在递增序列中的插入位置,使插入之后还是有序。
解题思路:
普通的二分查找,要注意边界条件。
代码:
class Solution {public: int searchInsert(vector<int>& nums, int target) { int begin=0; int end=nums.size()-1; int index=-1; while(index==-1){ int mid=(begin+end)/2; if(nums[mid]==target){ index=mid; } else if(nums[mid]>target){ if(mid==0||target>nums[mid-1]){ //注意边界的情况 index=mid; } end=mid-1; } else if(nums[mid]<target){ if(mid==nums.size()-1||target<nums[mid-1]){ //注意边界的情况 index=mid+1; } begin=mid+1; } } return index; }};
34. Search for a Range
题意:
递增序列中的元素可能重复,找到target在递增序列中的range,如果不存在输出[-1,-1]
解题思路:
用两个二分查找,分别找出左界限和右界限。
代码:
int searchLeft(vector<int>& nums,int target){ int begin=0; int end=nums.size()-1; while(begin<=end){ int mid=(begin+end)/2; if(nums[mid]==target){ if(mid==0||nums[mid-1]<target){ return mid; } end=mid-1; } else if(nums[mid]<target){ begin=mid+1; } else if(nums[mid]>target){ end=mid-1; } } return -1;}int searchRight(vector<int>& nums,int target){ int begin=0; int end=nums.size()-1; while(begin<=end){ int mid=(begin+end)/2; if(nums[mid]==target){ if(mid==nums.size()-1||nums[mid+1]>target){ return mid; } begin=mid+1; } else if(nums[mid]<target){ begin=mid+1; } else if(nums[mid]>target){ end=mid-1; } } return -1;}class Solution {public: vector<int> searchRange(vector<int>& nums, int target) { vector<int> result; result.push_back(searchLeft(nums,target)); result.push_back(searchRight(nums,target)); return result; } };
33. Search in Rotated Sorted Array
题意:
在一个旋转数组中找目标元素。
解题思路:
分情况套路的二分查找:
代码:
阅读全文
0 0
- leetcode--二分查找和二分排序
- leetcode二分排序 & 查找:
- 二分查找和二分排序
- 二分排序和查找
- 排序和二分查找
- 二分插入排序和二分查找
- LeetCode基础-查找-排序数组二分查找
- 冒泡排序和二分查找
- 快速排序 和 二分查找
- 冒泡排序和二分查找
- 冒泡排序和二分查找
- 二分查找和快速排序
- 二分查找和排序算法
- 二分排序与二分查找
- 二分排序与二分查找
- 二分排序与二分查找
- 排序和二分查找(从小到大排序)
- 二分查找,希尔排序和快速排序
- Cocos2d-Lua 3.12 生成绑定 导出C++类给LUA调用( tolua genbindings.py 的使用)
- Nginx安装教程(CentOS7)
- Android中常见的内存泄漏
- 安卓笔记:限制行数显示,限制字数显示,多余部分省略号表示
- 微软正考虑添加 Python 为官方的 Excel 脚本语言
- leetcode--二分查找和二分排序
- vscode Android调试
- 摧毁股市的程序居然是这样子的!
- 赶紧看!取款方式巨变,银行卡将消失?多家银行有重大发布!
- linux 离线源制作(基本适用所有离线包安装)
- 日交易额百亿级交易系统的超轻量日志实现
- JDK版本切换问题
- 判断字符串括号是否闭合(){}[]
- 关于python3 Socket.send bytes-Obj 问题