【每日刷题】Day43
🥕个人主页:开敲🍉
🔥所属专栏:每日刷题🍍
🌼文章目录🌼
1. 2231. 按奇偶性交换后的最大数字 - 力扣(LeetCode)
2. 2644. 找出可整除性得分最大的整数 - 力扣(LeetCode)
3. 2357. 使数组中所有元素都等于零 - 力扣(LeetCode)
1. 2231. 按奇偶性交换后的最大数字 - 力扣(LeetCode)
//思路:暴力遍历比较。将num的每一位用数组存储,遍历数组的每一位,将其与后面的奇偶性相同的元素比较,将更大的元素放于数组前面。
int largestInteger(int num)
{
int ans = 0;
int tmp = num;
int count = 0;
while(tmp)
{
count++;
tmp/=10;
}
tmp = num;
int* arr = (int*)malloc(sizeof(int)*count);
int size = count-1;
while(tmp)
{
arr[size] = tmp%10;
size--;
tmp/=10;
}//以上操作将num的每一位用数组存储
for(int i = 0;i<count-1;i++)
{
for(int j = i+1;j<count;j++)
{
if((arr[i]%2==0&&arr[j]%2==0)||(arr[i]%2&&arr[j]%2))//确保比较的两个数奇偶性相同
{
if(arr[i]<arr[j])//将更大的放于数组前面
{
int tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
}
}
}
for(int i = 0;i<count;i++)
{
ans = ans*10+arr[i];//将数组中的每一位数转换为整数
}
return ans;
}
2. 2644. 找出可整除性得分最大的整数 - 力扣(LeetCode)
//思路:遍历查找。遍历nums数组,记录divisors中每个数的可除性得分,记录最大得分者。若有多个最大得分者,记录最小得分者的大小返回。
int maxDivScore(int* nums, int numsSize, int* divisors, int divisorsSize)
{
int max = -1;
int ans = 0;
for(int i = 0;i<divisorsSize;i++)
{
int count = 0;
for(int j = 0;j<numsSize;j++)
{
if(nums[j]%divisors[i]==0)//记录divisors中每个数的可除性得分
{
count++;
}
}
if(max<count||(count==max)&&divisors[i]<ans)//记录最大得分者,如果有多个最大得分,记录最小得分者的大小
{
max = count;
ans = divisors[i];
}
}
return ans;
}
3. 2357. 使数组中所有元素都等于零 - 力扣(LeetCode)
//思路:遍历改变数组中元素大小。记录数组中除了0以外的最小值,将数组中的每个元素减去最小值,重复上述过程,直到数组中元素都为0。
int minimumOperations(int* nums, int numsSize)
{
int ans = 0;
int sub = INT_MAX;
int flag = 1;
do
{
sub = INT_MAX;
for(int i = 0;i<numsSize;i++)
{
if(nums[i]<sub&&nums[i]!=0)
{
sub = nums[i];//记录除0以外的最小元素
}
}
for(int i = 0;i<numsSize;i++)
{
if(nums[i]!=0)
{
nums[i]-=sub;//将数组中的元素都减去该值
}
}
ans++;
}while(sub!=INT_MAX);//当sub==INT_MAX时,说明数组中元素都为0
return ans-1;//由于数组中都为0时ans还会+1,因此这里需要-1
}