【跟着英雄哥学算法】 线性枚举 -- 最值算法
作者:互联网
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