Redian新闻
>
find max in shifted sorted array
avatar
i*7
2
二分查找
avatar
C*y
3
二分以后怎么排除一半呢?

【在 i*********7 的大作中提到】
: 二分查找
avatar
w*x
4

二分原理是基于位置而不是数字, 啥时候觉得该向左找右边一半就排除了

【在 C***y 的大作中提到】
: 二分以后怎么排除一半呢?
avatar
C*y
5
能稍微详细讲讲不?
谢谢

【在 w****x 的大作中提到】
:
: 二分原理是基于位置而不是数字, 啥时候觉得该向左找右边一半就排除了

avatar
a*y
6
int FindSortedArrayMax(int A[], int N) {
int L = 0;
int R = N - 1;
while (A[L] > A[R]) {
int M = L + (R - L) / 2;
if (A[M] > A[R])
L = M + 1;
else
R = M;
}
return L == 0 ? A[N-1] : A[L-1];
}
avatar
B*1
7
Your code seems not right for this case:
3 5 1 3 3

【在 a*******y 的大作中提到】
: int FindSortedArrayMax(int A[], int N) {
: int L = 0;
: int R = N - 1;
: while (A[L] > A[R]) {
: int M = L + (R - L) / 2;
: if (A[M] > A[R])
: L = M + 1;
: else
: R = M;
: }

avatar
l*a
8
obviously, it just doesn't support dup
once there is dup, u need a full scan

【在 B*******1 的大作中提到】
: Your code seems not right for this case:
: 3 5 1 3 3

avatar
B*1
9
谢谢,我傻了。

【在 l*****a 的大作中提到】
: obviously, it just doesn't support dup
: once there is dup, u need a full scan

avatar
C*y
10
谢谢!
但是感觉不太对,比如说3,4,5,1,2
M = 2, A[2] > A[4] ==> L = 3
L实际上应该等于2
我稍微修改了一下你的程序,如下:
int FindSortedArrayMax(int A[], int N) {
int L = 0;
int R = N - 1;
while (Lif(A[L] < A[R]) return R;
int M = L + (R - L) / 2;
if (A[M] > A[R])
{
if(L == M) break;
L = M;
}
else
R = M -1;
}
return L;
}

【在 a*******y 的大作中提到】
: int FindSortedArrayMax(int A[], int N) {
: int L = 0;
: int R = N - 1;
: while (A[L] > A[R]) {
: int M = L + (R - L) / 2;
: if (A[M] > A[R])
: L = M + 1;
: else
: R = M;
: }

avatar
g*u
11
看我的这个行不行?
#include
#include
using namespace std;
int maxShiftedSortArray(vector& array){
int n=array.size();
if(n==1)
return array[0];
int l=0;
int r=n-1;
int m;
while(lm=(r+l)/2;
if(array[m]>=array[l]){
l=m;
}else{
r=m-1;
}
}
return max(array[l],array[r]);
}

【在 C***y 的大作中提到】
: 来自http://www.mitbbs.com/article_t1/JobHunting/32202217_0_1.html
: 请问这题怎么解?
: 谢谢

avatar
a*y
12
怎么不对了,这个return是L-1,not L

【在 C***y 的大作中提到】
: 谢谢!
: 但是感觉不太对,比如说3,4,5,1,2
: M = 2, A[2] > A[4] ==> L = 3
: L实际上应该等于2
: 我稍微修改了一下你的程序,如下:
: int FindSortedArrayMax(int A[], int N) {
: int L = 0;
: int R = N - 1;
: while (L: if(A[L] < A[R]) return R;

avatar
C*y
13
嗯,你的应该是对的
我看错了

【在 a*******y 的大作中提到】
: 怎么不对了,这个return是L-1,not L
相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。