↓ Skip to main content
  1. Posts/

求旋转数组最小值(二分)

·183 words·1 min
Note: This article is available in Chinese only. 本文暂无英文版本。 View original

题意:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。

思路:二分。。。注意有重复元素。。。

 1class Solution {
 2public:
 3    int minNumberInRotateArray(vector<int> a) {
 4        int siz = a.size();
 5        int l = 0 ;
 6        int r = siz-1;
 7        while (r-l>1)
 8        {
 9            int mid = (l+r)>>1;
10            if (a[mid]>a[r]) l = mid;
11            else   r = mid;
12
13        }
14        return min(a[l],a[r]);
15
16    }
17};

Related

用两个栈实现队列

·198 words·1 min
思路: 一个元素入队的时候直接插入到stack1中。。。 一个元素出队的时候。。。如果stack2不为空。。stack2顶的元素就是要出队的。。 如果stakc2为空。。。就将stack1清空,按照元素出栈的顺序依次入栈到stack2

leetcode 74. Search a 2D Matrix

·183 words·1 min
题目链接 题意:给一个二维数组。。。每一行每一列都分别递增。。问某个value是否出现过。。。 思路:单调。。显然二分。。。唯一的技巧是从右上角开始搜。 1/* *********************************************** 2Author :111qqz 3Created Time :2017年03月09日 星期四 19时03分07秒 4File Name :74.cpp 5************************************************ */ 6class Solution { 7 8public: 9 10 bool searchMatrix(vector<vector<int>>& matrix, int target) { 11 12 int n = matrix.size(); 13 if (n==0) return false; 14 int m = matrix[0].size(); 15 if (m==0) return false; 16 int row = 0 ; 17 int col = m-1; 18 while (col>=0&&row<n) 19 { 20 if (matrix[row][col]==target) return true; 21 else 22 if (matrix[row][col]>target) col--; 23 else row++; 24 } 25 return false; 26 27 } 28 29};

codeforces 381 div 2 D. Alyona and a tree(二分+前缀和)

·824 words·2 mins
题目链接 d:题意:一棵树,给出边权和点权,定义点v控制点u,当且仅当u是v的子树中的点,并且dis(u,v)<=a[u],其中dis(u,v)为点u到点v路径上的边权和,a[u]为点u的点权,现在问对于每个节点v,其能控制的点有多少个。

codeforces #609 F. Frogs and mosquitoes (线段树+二分)

·1620 words·4 mins
题目链接 题意:n 只青蛙,第 i 只位于 x[i],舌头长度为 t[i]。m 只蚊子,第 i 只蚊子所在位置为 p[i],蚊子的大小为 b[i]。 蚊子按照出现顺序输入。 一只青蛙能吃到蚊子当且仅当蚊子和青蛙在同一个位置,或者蚊子在青蛙右边并且与青蛙的距离小于等于该青蛙舌头的长度。