Java教程

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

本文主要是介绍【跟着英雄哥学算法】 线性枚举 -- 最值算法,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

                        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;
}

 

这篇关于【跟着英雄哥学算法】 线性枚举 -- 最值算法的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!