题目名称:求最小元素
时间限制:1000ms内存限制:256M
题目描述
Suppose an array sorted in ascending order is rotated at some pivot
unknown to you beforehand. (i.e., [0,1,2,4,5,6,7] might become
[4,5,6,7,0,1,2]). Find the minimum element. You may assume no
duplicate exists in the array. (注意:测试用例仅做参考,我们会根据代码质量进行评分)
输入描述:
第一行输入整数n。(1<=n<=10000)表示数组的大小 第二行给出n个整数a.(0<=a<=1e9)
输出描述:
输出答案
示例
输入
5
3 4 5 1 2
输出
1
思路:我们只需要将他存入数组,然后循环数组,找到最小值,然后将它输出出来。
代码如下(编译器是dev,语言是C语言):
#include <stdio.h>
#include <stdlib.h>
int solution(int n, int arr[]){
int result;
// TODO: 请在此编写代码
result = arr[0];
for(int i = 1;i<n;i++){
if(result>arr[i]){
result = arr[i];
}
}
return result;
}
int main() {
int n;
scanf("%d", &n);
int *arr;
arr = (int*)malloc(n * sizeof(int));
for (int i = 0; i < n; i++)
{
scanf("%d", &arr[i]);
}
int result = solution(n, arr);
printf("%d", result);
return 0;
}
不过上面是在他基础上填写的代码,我们其实感觉还有更快的算法,就是每当输入进来,我就判断是否是最小值,如果是最小值,我们就将它记录下来,这样只要输入完,我们就知道谁是最小值了呢。
该算法本人认为比较优,如果有更好的想法,欢迎q我!
代码如下(编译器是dev,语言是C语言):
#include <stdio.h>
int min,i,n,temp;
int main(){
scanf("%d",&n);
scanf("%d",&temp);
min = temp;
for(i = 1;i<n;i++){
scanf("%d",&temp);
if(min>temp){
min = temp;
}
}
printf("%d",min);
return 0;
}
噗哈哈,咱就是说在理论上,肯定性能上做法二不管是时间复杂度还是空间复杂度都是要小的,因为你做法一弄了一个数组,做法二并没有,直接就三个变量,而且做法1还有一个循环遍历,做法二根本没有,不过我也不知道是什么原因,导致做法二的用时和空间利用均比做法一高!