目录
485. 最大连续 1 的个数
原题链接:最大连续 1 的个数
分析
简单的遍历方法,定义一个计数器,遇到1就++,遇到零置为0。
循环每走一步就和上一次的计数器存的值比较,返回大的数。
代码
class Solution {
public:
int Max(int a, int b)
{
return a > b ? a : b;
}
int findMaxConsecutiveOnes(vector<int>& nums)
{
int count = 0, ans = 0;
for (int i = 0; i < nums.size(); ++i)
{
if (nums[i] == 1)
{
count++;
ans = Max(ans, count);
}
else
{
count = 0;
}
}
return ans;
}
};
LeetCode 1464. 数组中两元素的最大乘积
原题链接:数组中两元素的最大乘积
分析
根据题意,就是让找出第一大和第二大的元素。并且范围内没有负数,不用考虑负数了。
方法:
1.直接遍历。
2.排序后取数组最后两个元素(不推荐)
代码
int maxProduct(int* nums, int numsSize)
{
int max = nums[0];
int nextmax = nums[1];
for (int i = 1; i < numsSize; ++i)
{
if (nums[i] > max)
{
nextmax = max;
max = nums[i];
}
else if (nums[i] == max)
{
nextmax = nums[i];
}
else if (nums[i] > nextmax && nums[i] < max)
{
nextmax = nums[i];
}
}
return (max - 1) * (nextmax - 1);
}
153. 寻找旋转排序数组中的最小值
原题链接: 寻找旋转排序数组中的最小值
代码
class Solution {
public:
int findMin(vector<int>& nums)
{
int min = INT_MAX;
for (int i = 0; i < nums.size(); ++i)
{
if (min > nums[i])
{
min = nums[i];
}
}
return min;
}
};
414. 第三大的数
原题链接:414. 第三大的数
代码1:遍历
int thirdMax(int* nums, int numsSize)
{
int max, second, third;
int min = nums[0];
for (int i = 0; i < numsSize; ++i)
{
if (min >= nums[i])
{
min = nums[i];
}
}
max = second = third = min;
for (int i = 0; i < numsSize; ++i)
{
if (nums[i] > max)
{
third = second;
second = max;
max = nums[i];
}
else if (nums[i] > second && nums[i] != max)
{
third = second;
second = nums[i];
}
else if (nums[i] > third && nums[i] != second && nums[i] != max)
{
third = nums[i];
}
}
if (max == second || second == third)
{
return max;
}
return third;
}
628. 三个数的最大乘积
原题链接:628. 三个数的最大乘积
分析
找出数组中最大的三个数,和两个最小的负数。
用三个最大数的乘积和两个最小负数与最大值的乘积比较
返回大的。
代码
int mycmp(const void* p1, const void* p2)
{
const int* a = (const int*)p1;
const int* b = (const int*)p2;
return *a - *b;
}
int maximumProduct(int* nums, int numsSize)
{
if (NULL == nums) return 0;
int n = numsSize;
qsort(nums, n, sizeof(int), mycmp);
return fmax(nums[0]*nums[1]*nums[n - 1], nums[n - 1]*nums[n - 2]*nums[n - 3]);
}
C++代码:
class Solution {
public:
int maximumProduct(vector<int>& nums)
{
sort(nums.begin(), nums.end());
int n = nums.size();
return max(nums[0]*nums[1]*nums[n - 1] , nums[n - 1]*nums[n - 2]*nums[n - 3]);
}
};