Input: 2 9 1 15 25 45 42 21 17 12 11 5 1 45 47 50 5 Output: 45 50
private static int findMax(int[] arr,int size){
int low = 0;
int high = size-1;
while(low<=high){
int mid = low + (high - low)/2;
if(arr[mid] > arr[mid+1] && arr[mid] > arr[mid-1]){
return arr[mid];
}else if(arr[mid-1]>arr[mid]){
high = mid-1;
}else{
low = mid+1;
}
}
return -1;
}
public static void main(String[] args) throws IOException {
try {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String line = br.readLine();
String[] strs = line.trim().split("\\s");
int testCases = Integer.parseInt(strs[0]);
String[] strs1;
while(testCases>0){
strs1 = br.readLine().trim().split("\\s");
int size = Integer.parseInt(strs1[0]);
String[] stringArray = br.readLine().trim().split("\\s");
int[] arr = new int[size];
for(int i=0;i<size;i++){
arr[i] = Integer.parseInt(stringArray[i]);
}
int ans = findMax(arr,size);
System.out.println(ans);
testCases--;
}
} catch(Exception e){}
}
Wrong Answer. !!!Wrong Answer Possibly your code doesn't work correctly for multiple test-cases (TCs). The first test case where your code failed: Input: 10041 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 27................. Its Correct output is: 10041 And Your Code's output is:
我不明白为什么它能很好地适用于较小的输入,而且如果我把输入大小改成1000,传递一个包含1000个元素和978个最大值的数组,那么它能很好地工作,但我不能提交它。我使用的平台是GeeksforGeeks。
你传递的是正确的双音数组吗?如果不是,那么您还需要为一个双音数组编写检查函数。那么您的代码可能会工作。下面分享我的代码,以供在数组中查找最大数时参考。
private static int findMax(int[] arr){
int low = 0, high = arr.length -1, mid;
while(low <= high){
mid = (low + high)/2;
if(arr[mid] > arr[mid+1] && arr[mid] > arr[mid-1]) {
return arr[mid];
} else if(arr[mid-1] > arr[mid] && arr[mid] > arr[mid+1]) {
high = mid-1;
} else if(arr[mid+1] > arr[mid] && arr[mid] > arr[mid-1]) {
low = mid+1;
}
}
return -1;
}
检查数组的共享码是否为双声码,给出的时间复杂度为O(log n)
public static int checkBitonicArr(int[] arr) {
int count = 0;
int initialCount = 0, i, j;
for (i = 0; i < arr.length - 1; i++) {
if (arr[i] < arr[i + 1])
continue;
else break;
}
if (i == arr.length - 1) return 0;
for (j = i; j < arr.length - 1; j++) {
if (arr[j] > arr[j + 1]) continue;
else break;
}
if (j != arr.length - 1) {
return 0;
}
return 1;
}
您可以使用checkbitonicarr(a)==1来测试它?“是”:“否”
所以我试图解决以下问题: 给定一个整数数组。找到其中的峰值元素。如果数组元素不小于其相邻元素,则该元素为峰值。对于角元素,我们只需要考虑一个邻居。例如,对于输入数组{5,10,20,15},20是唯一的峰值元素。对于输入数组{10、20、15、2、23、90、67},有两个峰值元素:20和90。请注意,我们需要返回任何一个峰值元素。 从以下链接:http://www.geeksforgeeks.o
本文向大家介绍为什么我们需要一个数据库,包括了为什么我们需要一个数据库的使用技巧和注意事项,需要的朋友参考一下 数据库是数据的集合,通常以电子形式存储。数据库的设计通常是为了使其易于存储和访问信息。 好的数据库对任何公司或组织都至关重要。这是因为数据库存储了有关公司的所有相关详细信息,例如员工记录,交易记录,工资详细信息等。 数据库重要的各种原因是- 管理大量数据 数据库每天存储和管理大量数据。使
问题内容: 我有一个。如果用户第二次输入相同的数字,我想向用户显示。为此,我需要找到它。 我希望我能说清楚。 问题答案: 如果要检查是否在中存储了某些值,则可以使用该方法,如果对象在列表中,则将返回该方法,否则。
我想计算最接近数组平均数的数字,我已经计算完平均数,但我不知道如何找到最接近平均数的数字。 }
问题内容: 为什么编译器没有在开关中的每个代码块之后自动放置break语句?是出于历史原因吗?您何时要执行多个代码块? 问题答案: 有时将多个案例与同一代码块关联会很有帮助,例如 等。只是一个例子。 以我的经验,通常“摔倒”并在一种情况下执行多个代码块是不好的风格,但是在某些情况下可能会有用处。
问题内容: 我正在学习JPA,有一个问题: 在哪些情况下,我们的应用程序需要多个? 我知道的两种情况如下: 当我们的应用程序是多线程应用程序并且一个以上的线程需要JPA事务时,因为它不是线程安全的,因此每个线程需要一个线程。 当任何一个线程需要多个并发事务时,由于和之间存在一对一的关系,因此在该线程中我们需要多个。 Q1。当我们需要多个条件时,还有其他情况吗? Q2。据我了解,每个Percentn