二分法
二分法
循环是人递归是神
北京邮电大学
展开
-
二分模板
//lower_bound,即>=target实现。跳出循环时,l==r int l = 0, r = nums.size(); while (l < r) { int m = (l + r) >> 1; if (nums[m] < target) l = m + 1; else r = m; } //upper_bound,即> target实现。取边界l l = 0, r = nums.size() - 1; while (l <= r) {.原创 2020-07-05 23:56:05 · 163 阅读 · 0 评论 -
POJ 2456
二分查找,将最小距离和最大距离进行二分 #include<iostream> #include<algorithm> using namespace std; int pos[1000000]; int n, m, best; int binary_search() { int l = 1, r = pos[n - 1] - pos[0]; while (l ...原创 2019-09-28 00:09:59 · 211 阅读 · 0 评论 -
Poj1836
http://poj.org/problem?id=1836 最长上升子序列(longest increasing subsequence)的变种题,找出左右两个方向的LIS,之后枚举遍历就行了, 具体可参考:https://blog.csdn.net/lxt_Lucia/article/details/81206439#commentsedit 两种方法实现了下,1是动态规划,简单来说...原创 2019-03-29 13:33:53 · 336 阅读 · 0 评论 -
287. 寻找重复数
反二分法,用二分法减小范围。 int findDuplicate(vector<int>& nums) { int l = 1,r = nums.size() - 1; while(l < r){ int m = (l+r)/2; int cnt = 0; for(int i:nums) if(i <= m) .原创 2020-05-26 14:27:07 · 136 阅读 · 0 评论 -
leetcode 162 寻找峰值
这道题主要是题意的理解,题中“你可以假设nums[-1] = nums[n] = -∞。”这句话暗示如果num[i] <num[i+1],那么峰值一定在i+1到数组末尾存在。 int findPeakElement(vector<int>& nums) { int l = 0,r = nums.size() - 1; while(l ...原创 2020-02-29 13:23:26 · 133 阅读 · 0 评论 -
leetcode 35. 搜索插入位置
int searchInsert(vector<int>& nums, int target) { int l = 0,r = nums.size() - 1; while(l < r) { int mid = (l + r) >> 1; if(nums[mid]...原创 2020-02-01 18:55:13 · 135 阅读 · 0 评论 -
leetcode 4:寻找两个有序数组的中位数(二分法)
题目大意 给定两个大小为 m 和 n 的有序数组 nums1和 nums2。 请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n))。 你可以假设 nums1 和 nums2 不会同时为空。 示例 1: nums1 = [1, 3] nums2 = [2] 则中位数是 2.0 示例 2: nums1 = [1, 2] nums2 = [3, 4] 则中位数是 ...转载 2020-01-31 18:35:30 · 264 阅读 · 0 评论 -
leetcode 34二分法确定左右边界
class Solution { public: vector<int> searchRange(vector<int>& nums, int target) { if(nums.size()==0) return {-1, -1}; int l = 0, r = nums.size() - 1; ...原创 2020-01-24 14:43:44 · 550 阅读 · 0 评论 -
二分查找
#include<iostream> #include<algorithm> #include <direct.h> #include<fstream> #include<vector> using namespace std; int main() { vector<int> a = { 1,2}; int l...原创 2019-11-19 14:22:48 · 96 阅读 · 0 评论 -
数据结构:二分法的整理
#include<iostream> #include<Eigen/Dense> #include<map> #include<vector> using namespace std; using namespace Eigen; int main() { int a[7] = { 1,2,3,4,9,10,11 }; int ...原创 2019-10-04 21:22:54 · 299 阅读 · 0 评论