XM20. 旋转数组中的最小元素
描述
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个排好序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3, 4, 5, 1, 2}为{1, 2, 3, 4, 5}的一个旋转,该数组的最小值为1。输入描述
一个排好序的数组的一个旋转输出描述
该数组的最小值示例1
输入:
3 4 5 1 2
输出:
1
C++ 解法, 执行用时: 28ms, 内存消耗: 4648KB, 提交时间: 2021-08-29
#include <iostream> #include <vector> using namespace std; int main(){ vector<int> array; char ch; int num = 0; bool flag = true; while((ch = getchar()) != '\n'){ if( ch == '-' ){ flag = false; } else if(ch != ' '){ num = 10 * num + (ch - '0'); } else { if( flag ) array.push_back(num); else array.push_back(num*-1); num = 0; flag = true; } } array.push_back(num); int n = array.size(); int le = 0; int ri = n-1; if( array[le] <array[ri] ){ cout<<array[le]; return 0; } while( le <ri ){ if( array[le] <array[ri] ){ break; } int mid = ((ri-le)>>1)+le; if( array[le] <array[mid] ){ le = mid+1; }else if( array[le] >array[mid] ){ ri = mid; }else{ le++; } } cout<<array[le]; return 0; }
C++ 解法, 执行用时: 37ms, 内存消耗: 4696KB, 提交时间: 2020-08-12
#include <bits/stdc++.h> using namespace std; void read(vector <int>& vec){ char ch; int num = 0; while((ch = getchar()) != '\n'){ if(ch != ' '){ num = 10 * num + (ch - '0'); } else { vec.push_back(num); num = 0; } } vec.push_back(num); } int main(){ vector <int> vec; read(vec); int mid = -1; for (int i = 0; i < vec.size() - 1; i++){ if(vec[i] > vec[i + 1]){ mid = i + 1; break; } } if(mid == -1){ cout << vec[0] << "\n"; } else { cout << vec[mid] << "\n"; } return 0; }