
二分查找
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 · 233 阅读 · 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 · 133 阅读 · 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 · 140 阅读 · 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 · 155 阅读 · 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 · 108 阅读 · 0 评论 -
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",&...原创 2019-09-01 09:39:31 · 168 阅读 · 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 · 306 阅读 · 1 评论 -
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 · 121 阅读 · 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 · 133 阅读 · 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 · 156 阅读 · 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 · 269 阅读 · 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 · 109 阅读 · 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 · 262 阅读 · 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 · 101 阅读 · 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 · 170 阅读 · 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 · 120 阅读 · 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 · 256 阅读 · 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 · 308 阅读 · 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 · 186 阅读 · 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 · 200 阅读 · 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 · 135 阅读 · 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 · 132 阅读 · 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 · 105 阅读 · 0 评论 -
35. Search Insert Position
二分模板库大于等于用lower_bound(first, last, target)大于用upper_bound(first, last, target)版本1class Solution {public: int searchInsert(vector<int>& nums, int target) { return lower_bound(...原创 2019-08-28 16:55:35 · 130 阅读 · 0 评论 -
34. Find First and Last Position of Element in Sorted Array
版本1class 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 · 154 阅读 · 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 · 95 阅读 · 0 评论 -
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 · 100 阅读 · 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 · 139 阅读 · 1 评论 -
人见人爱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 · 504 阅读 · 0 评论