题目1:
题目链接
int findMaxConsecutiveOnes(int* nums, int numsSize)
{
int cnt=0;
int max=0;
for(int i=0;i<numsSize;i++)
{
if(nums[i]==1)
{
cnt++;
max=cnt>max?cnt:max;
}
else
{
cnt=0;
}
}
return max;
}
题目2
题目链接
//找最大和次最大的数
int maxProduct(int* nums, int numsSize){
int max=nums[0];
int smax=nums[1];
for(int i=1;i<numsSize;i++)
{
if(nums[i]>=max)
{
smax=max;
max=nums[i];
}
else if(nums[i]<max&&nums[i]>=smax)
{
smax=nums[i];
}
}
return (max-1)*(smax-1);
}
题目3
题目链接
//二分
int findMin(int* nums, int numsSize){
int left=0;
int right=numsSize-1;
while(left<right)
{
int mid=(left+right)/2; //如果相差1则mid=left
if(nums[mid]>nums[right])
{
left=mid+1;
}
else
{
right=mid;
}
}
return nums[left];
}
//排序
int change(void*num1,void*num2)
{
return *(int*)num1-*(int*)num2;
}
int findMin(int* nums, int numsSize)
{
qsort(nums,numsSize,sizeof(int),change);
return nums[0];
}
题目4
题目链接
//二分
int findMin(int* nums, int numsSize){
int left=0;
int right=numsSize-1;
while(left<right)
{
int mid=(left+right)/2;
if(nums[mid]>nums[right])
{
left=mid+1;
}
else if(nums[mid]<nums[right])
{
right=mid;
}
else if(nums[mid]==nums[right])
{
right=right-1;
}
}
return nums[left];
}
题目5
题目链接
int thirdMax(int* nums, int numsSize){
long long first=LONG_MIN;
long long second=LONG_MIN;
long long third=LONG_MIN;
if(numsSize==1)
return nums[0];
else if(numsSize==2)
return nums[0]>nums[1]?nums[0]:nums[1];
else if(numsSize>2)
{
for(int i=0;i<numsSize;i++)
{
if(nums[i]>first)
{
third=second;
second=first;
first=nums[i];
}
else if(nums[i]<first&&nums[i]>second)
{
third=second;
second=nums[i];
}
else if(nums[i]<second&&nums[i]>third)
{
third=nums[i];
}
}
}
if(third==LONG_MIN)
return first;
return third;
}
题目6
题目链接
int maximumProduct(int* nums, int numsSize){
int first=INT_MIN;
int third=INT_MIN;
int second=INT_MIN;
int sfirst=INT_MAX;//最小的数
int ssecond=INT_MAX;//次小的数
for(int i=0;i<numsSize;i++)
{
if(nums[i]<=sfirst)
{
ssecond=sfirst;
sfirst=nums[i];
}
else if(nums[i]>sfirst&&nums[i]<=ssecond)
{
ssecond=nums[i];
}
if(nums[i]>=first)
{
third=second;
second=first;
first=nums[i];
}
else if(nums[i]<first&&nums[i]>=second)
{
third=second;
second=nums[i];
}
else if(nums[i]<second&&nums[i]>=third)
{
third=nums[i];
}
}
//考虑两个负数乘以一个正数是否大于三个正数相乘
return first*third*second>first*sfirst*ssecond?first*third*second:first*sfirst*ssecond;
}
刷题愉快