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顶的元素就是要出队的。。

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,其能控制的点有多少个。