二分查找
SYaoJun
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
AcWing 1236. 递增三元组
题目链接 二分法 固定一个数组 对另外两个数组二分 注意处理边界 #include <iostream> #include <cstring> #include <algorithm> using namespace std; const int N = 1e5+5; int a[N], b[N], c[N]; int main() { int n; scanf("%d", &n); for(int i = 0; i < n;原创 2021-06-11 11:24:37 · 282 阅读 · 0 评论 -
二分查找
题目 类型:二分搜索 题意:从有序数组中查找某个元素第一次出现的位置 class BinarySearch { public: int getPos(vector<int> A, int n, int val) { int l = 0, r = n-1; while(l < r){ int mid = (l + r)...原创 2020-03-27 15:44:57 · 163 阅读 · 1 评论 -
744. 寻找比目标字母大的最小字母
二分 难度:简单 推荐学习视频:花花酱 class Solution { public: char nextGreatestLetter(vector<char>& letters, char target) { //2020.2.27 二分 左闭有开 int n = letters.size(); int l = 0, ...原创 2020-02-27 22:32:50 · 171 阅读 · 0 评论 -
1010 只包含因子2 3 5的数
51nod题目链接 使用递推先计算出long long范围内的只包含235因子的数 经过测试在11000个数内 注意: 输入的数的范围是long long范围 #include <cstdio> #include <algorithm> #include <iostream> using namespace std; const int N = 11000; c...原创 2019-11-15 15:32:57 · 190 阅读 · 0 评论 -
162. Find Peak Element
不完全单调的数据使用二分 还是有点没弄懂 class Solution { public: int findPeakElement(vector<int>& nums) { int l = 0, r = nums.size() - 1; while(l < r){ int mid = l + r >&g...原创 2019-08-29 09:37:31 · 202 阅读 · 0 评论 -
786. K-th Smallest Prime Fraction
花花酱 class Solution { public: vector<int> kthSmallestPrimeFraction(vector<int>& A, int K) { const int n = A.size(); double l = 0, r = 1.0; while(l < r){ ...原创 2019-09-05 08:56:18 · 296 阅读 · 0 评论 -
668. Kth Smallest Number in Multiplication Table
花花酱 class Solution { public: int findKthNumber(int m, int n, int k) { int l = 1, r = m*n; while(l < r){ int mid = l + (r -l)/2; if(les(m, n, mid) >= k...原创 2019-09-05 08:22:07 · 137 阅读 · 0 评论 -
在一个有序的经过旋转的数组里查找一个数
#include <unordered_map> #include <iostream> #include <vector> using namespace std; int main(){ int x; char c; vector<int> nums; while(cin>>x){ c = getchar(); nu...原创 2019-09-04 16:46:15 · 299 阅读 · 0 评论 -
找出旋转有序数列的中间值
#include <iostream> #include <vector> #include <algorithm> #include <cstdio> using namespace std; vector<int> nums; int main(){ char c; int x; while(scanf("%d", &x...原创 2019-09-04 16:43:46 · 176 阅读 · 0 评论 -
540. Single Element in a Sorted Array
class Solution { public: int singleNonDuplicate(vector<int>& nums) { int l = 0, r = nums.size()-1; while(l < r){ int mid = l + (r - l) / 2; int...原创 2019-09-03 17:25:17 · 158 阅读 · 0 评论 -
744. Find Smallest Letter Greater Than Target
这道题明明很简单,但是我也弄了好久。 之前yxc讲的是从n-1开始,但是这里弄了从l开始。 可能还是不熟悉二分吧,还要多理解。 class Solution { public: char nextGreatestLetter(vector<char>& letters, char target) { int l = 0, r = letters.size...原创 2019-09-03 16:50:08 · 143 阅读 · 0 评论 -
2063 二分查找
题目链接 #include<iostream> using namespace std; const int N = 1e5+7; int nums[N]; int main(){ int n, k, x; cin>>n; for(int i = 0; i < n; i++){ cin>>nums[i]; } cin >> k; ...原创 2019-09-02 17:09:59 · 337 阅读 · 1 评论 -
1030 完美数列 (25 分)
#include <cstdio> #include <algorithm> using namespace std; const int maxn = 100010; int n,p,a[maxn]; int main(){ scanf("%d%d",&n,&p); for(int i=0;i<n;i++){ scanf("%d",&a[i]); } sort(a,a+n); int ans =1; for(int i=0;i<n;i++){ i原创 2019-09-01 09:39:31 · 206 阅读 · 0 评论 -
AcWing 789. 数的范围
二分模板题 题目链接 两段性 #include <string> #include <vector> #include <iostream> #include <algorithm> using namespace std; vector<int> nums; int main(){ int n, k, x; cin>>...原创 2019-08-31 14:04:55 · 134 阅读 · 0 评论 -
287. Find the Duplicate Number
class Solution { public: int findDuplicate(vector<int>& nums) { int l = 1, r = nums.size() - 1; while(l < r){ int mid = l + r >> 1; int c...原创 2019-08-29 09:55:30 · 135 阅读 · 0 评论 -
人见人爱A^B【HDOJ2035】
人见人爱A^B Problem Description 求A^B的最后三位数表示的整数。 说明:A^B的含义是“A的B次方” Input 输入数据包含多个测试实例,每个实例占一行,由两个正整数A和B组成(1<=A,B<=10000),如果A=0, B=0,则表示输入数据的结束,不做处理。 Output 对于每个测试实例,请输出A^B的最后三位表示的整数,每个输出占一行。 ...原创 2018-01-12 18:09:13 · 569 阅读 · 0 评论 -
278. First Bad Version
check函数直接调用API // Forward declaration of isBadVersion API. bool isBadVersion(int version); class Solution { public: int firstBadVersion(int n) { int l = 0, r = n; while(l < r){...原创 2019-08-28 22:56:26 · 145 阅读 · 0 评论 -
33. 搜索旋转排序数组
class Solution { public: int search(vector<int>& nums, int target) { if(nums.empty()) return -1; int l = 0, r = nums.size() - 1; while(l < r){ int ...原创 2019-08-28 22:43:53 · 164 阅读 · 1 评论 -
153. Find Minimum in Rotated Sorted Array
class Solution { public: int findMin(vector<int>& nums) { int l = 0, r = nums.size() - 1; while(l < r){ int mid = l + r >> 1; if(nums[mid]...原创 2019-08-28 22:25:50 · 131 阅读 · 0 评论 -
74. Search a 2D Matrix
class Solution { public: bool searchMatrix(vector<vector<int>>& matrix, int target) { if(!matrix.size() || !matrix[0].size()) return false; int n = matrix.size(), m...原创 2019-08-28 22:13:23 · 122 阅读 · 0 评论 -
34. Find First and Last Position of Element in Sorted Array
版本1 class Solution { public: vector<int> searchRange(vector<int>& nums, int target) { int a, b; if(find(nums.begin(), nums.end(), target) == nums.end()) { ...原创 2019-08-28 17:21:53 · 179 阅读 · 0 评论 -
35. Search Insert Position
二分模板库 大于等于用lower_bound(first, last, target) 大于用upper_bound(first, last, target) 版本1 class Solution { public: int searchInsert(vector<int>& nums, int target) { return lower_bound(...原创 2019-08-28 16:55:35 · 177 阅读 · 0 评论 -
69. Sqrt(x)
二分法 模板二 class Solution { public: int mySqrt(int x) { int l = 0, r = x; while(l < r){ int mid = l + r + 1ll >> 1; if(mid <= x / mid) l = mid; ...原创 2019-08-28 16:45:14 · 136 阅读 · 0 评论 -
51nod 1134最长递增子序列
题目链接 传统DP时间复杂度是O(n2)O(n^2)O(n2)有四个测试点会超时 使用二分优化到O(nlogn)O(nlogn)O(nlogn) 博客参考 AC代码 #include<cstdio> #include<iostream> #include<algorithm> using namespace std; const int maxn =5e4+5...原创 2019-08-27 08:43:50 · 160 阅读 · 0 评论 -
1048 Find Coins (25 分)
经典的双指针题 题目链接 #include<bits/stdc++.h> using namespace std; const int maxn=1e5+5; int v[maxn]; int main(){ int n,m; cin>>n>>m; for(int i=0;i<n;i++){ cin>>v[i]; } sort(v...原创 2019-07-23 19:12:13 · 169 阅读 · 0 评论 -
1044 Shopping in Mars (25 分)
这道题确实有点超出我的能力范围,参考了别人的博客,下面这个版本是我能懂也是大致想到但是无法实现的代码。 注意: 起止范围是从1开始的 当然也有用二分法解的,等我刷第二遍的时候再来补吧。 #include<bits/stdc++.h> using namespace std; int main(){ int n,m,p,q=1,ans=0,M=0x7fffffff; cin>&...原创 2019-07-23 17:54:11 · 225 阅读 · 0 评论 -
【模板】快速幂||取余运算
快速幂 最后一个测试点: 输入: 1 0 1 输出: 1^0 mod 1=0 版本1 #include<cstdio> typedef long long LL; int main(){ LL b,p,k; LL ans=1; scanf("%lld%lld%lld",&b,&p,&k); printf("%lld^%lld mod %lld=",b,p...原创 2019-07-15 14:29:33 · 212 阅读 · 0 评论 -
找一对数
输入n(≤105)n(\le 10^5)n(≤105),找出其中2个数之和等于mmm 解法一:暴力枚举 O(n2)O(n^2)O(n2) 解法二:二分搜索O(nlogn)O(nlogn)O(nlogn) 先对数组排序,然后对数组中的每个arr[i],二分查找m-arr[i] 解法三:双指针O(nlogn)O(nlogn)O(nlogn) 先对数组排序,然后使用两个指针,i=0,j=n−1i=0,j...原创 2019-05-17 10:41:07 · 365 阅读 · 0 评论 -
1010 Radix (25 分)
这道题很好,考查了二分法 方法1 进制转换本身是很简单的,但是本题涉及的进制最高可达整形上界,所以暴力查找肯定是不行的,其次二分法上界和下界的确定很关键。 二分查找的进制下界很容易理解,就是字符串中数字的最大值加1,上界假设字符串2的累加和等于字符串1的十进制值res,此时的进制即为所求的进制,故有: ∑i=0len2−1str2[i]∗radix(len2−1−i)=res\sum\limits...原创 2019-02-13 12:04:41 · 285 阅读 · 0 评论
分享