首先明白题目的含义:mn表示的是一个矩阵,初始化为0。再依次在满足条件的矩形内+1,最后找出最大数字的个数。我们只需要找到最小的长和宽即可。
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--
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)
首先将数组排序,如果数组中全是非负数,那么排序后的后三个数相乘即为最大值,如果全为非正数,那么最大的三个数相乘也为最大值。
如果数组中有正数有负数,则最大乘积既可能是三个最大正数的乘积,也可能是两个最小负数(即绝对值最大)与最大正数的乘积。
综上,我们在给数组排序后,分别求出三个最大正数的乘积,以及两个最小负数与最大正数的乘积,二者之间的最大值即为所求答案。
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]); }