CSDN每日一练求最小元素 C语言

题目名称:求最小元素
时间限制: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还有一个循环遍历,做法二根本没有,不过我也不知道是什么原因,导致做法二的用时和空间利用均比做法一高!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值