598. 区间加法 II - 力扣(LeetCode)
首先明白题目的含义:mn表示的是一个矩阵,初始化为0。再依次在满足条件的矩形内 1,最后找出最大数字的个数。我们只需要找到最小的长和宽即可。
代码语言:javascript复制int maxCount(int m, int n, int** ops, int opsSize, int* opsColSize) {
if(opsSize==0)
{
return m*n;
}
int min1=ops[0][0],min2=ops[0][1];
for(int i=1;i<opsSize;i )
{
if(ops[i][0]<min1)
{
min1=ops[i][0];
}
if(ops[i][1]<min2)
{
min2=ops[i][1];
}
}
return min1*min2;
}
605. 种花问题 - 力扣(LeetCode)
思路:只遍历一次,对于每一块地只有两种情况
1此地无花 1)上一块地有花,这块地·不能种花
2)上一块地没有花,这块地能种花,count
2此地有花 因为这是从前往后判断,所以当判断上一块地可以种花时,而这块地已经有花了,上块地就不能种花了,count--
代码语言:javascript复制bool canPlaceFlowers(int* flowerbed, int flowerbedSize, int n) {
int p=0,count=0;
for(int i=0;i<flowerbedSize; i)
{
if(flowerbed[i])//如果这块地有花
{
if(p)//上块地有花
{
count--;
}
p=1;
}
else
{
if(p==0)
{
count ;//如果上一块地无花
p=1;
}
else{
p=0;
}
}
}
return count>=n?true:false;
}
628. 三个数的最大乘积 - 力扣(LeetCode)
首先将数组排序,如果数组中全是非负数,那么排序后的后三个数相乘即为最大值,如果全为非正数,那么最大的三个数相乘也为最大值。
如果数组中有正数有负数,则最大乘积既可能是三个最大正数的乘积,也可能是两个最小负数(即绝对值最大)与最大正数的乘积。
综上,我们在给数组排序后,分别求出三个最大正数的乘积,以及两个最小负数与最大正数的乘积,二者之间的最大值即为所求答案。
代码语言:javascript复制int cmp(const void*a,const void*b)
{
return *(int*)a-*(int*)b;
}
int maximumProduct(int* nums, int numsSize) {
qsort(nums,numsSize,sizeof(int),cmp);
return fmax(nums[0]*nums[1]*nums[numsSize-1],nums[numsSize-3]*nums[numsSize-2]*nums[numsSize-1]);
}