编程语言
首页 > 编程语言> > 【跟着英雄哥学算法】 线性枚举 -- 最值算法

【跟着英雄哥学算法】 线性枚举 -- 最值算法

作者:互联网

                        n个数的最小值

   

   代码如下

int Min(int a, int b) {                 // 定义函数
    return a < b ? a : b;
}

int findMin(int* nums, int numsSize){
    int i;
    int min = 100000001;                // (2)如果定义最大值则max设为0
    for(i = 0; i < numsSize; ++i)
        min = Min(min, nums[i]);        // (3)
    return min;
}

 

 

      485.最大连续1的个数

      https://leetcode-cn.com/problems/max-consecutive-ones/

 

int findMaxConsecutiveOnes(int* nums, int numsSize){
int count=0;
int max=0;
for(int i=0;i<numsSize;i++){
    if(nums[i]==1){
        count+=1;
        if(count>max){ //求最大
            max=count; //每次循环的最大都等于count
        }
    }else count=0;    //这个条件比较必要
}return max;
}

 

      1464.数组中两元素的最大乘积

       https://leetcode-cn.com/problems/maximum-product-of-two-elements-in-an-array/

 

 

 

int maxProduct(int* nums, int numsSize){
    int max=0;                     //直接暴力循环
for(int i=0;i<numsSize-1;i++)     //注意i和j的取值范围既可以
{
for(int j=i+1;j<numsSize;j++)     //注意j=i+1
{
    if(((nums[i]-1)*(nums[j]-1))>max) 
    max=(nums[i]-1)*(nums[j]-1);
}
}

 

     153.寻找旋转排序数组中的最小值

     https://leetcode-cn.com/problems/find-minimum-in-rotated-sorted-array/

     别看条件这么多好像很复杂的样子,其实还是蛮简单的,只需要找到数组的最小值就可以

 

int findMin(int* nums, int numsSize){
    for(int i=1; i < numsSize; i++){    //遍历数组,从第二个元素开始
        if(nums[i] < nums[i-1]){        //若该元素小于其前一个元素则说明它为最小元素
            return nums[i];            //返回nums[i]
        }
    }

    return nums[0];                     //无符合元素则说明第一个元素为最小元素
}


 

 

    154.寻找旋转排序数组中的最小值Ⅱ

     https://leetcode-cn.com/problems/find-minimum-in-rotated-sorted-array-ii/

     听闻力扣hard很难,这道hard题我也以为很难,其实代码很简单,也很容易想到。

 



int findMin(int* nums, int numsSize){
    int min=nums[0];
for(int i=0;i<numsSize;i++){
    if(min>nums[i])min=nums[i];
}return min;
}

 

标签:numsSize,return,nums,--,max,哥学,int,算法,min
来源: https://blog.csdn.net/weixin_58183566/article/details/121185995