三十一、
给你一个整数数组
nums
,其中总是存在 唯一的 一个最大整数 。请你找出数组中的最大元素并检查它是否 至少是数组中每个其他数字的两倍 。如果是,则返回 最大元素的下标 ,否则返回
-1
。示例 1:
输入:nums = [3,6,1,0] 输出:1 解释:6 是最大的整数,对于数组中的其他整数,6 至少是数组中其他元素的两倍。6 的下标是 1 ,所以返回 1 。
示例 2:
输入:nums = [1,2,3,4] 输出:-1 解释:4 没有超过 3 的两倍大,所以返回 -1 。
示例 3:
输入:nums = [1] 输出:0 解释:因为不存在其他数字,所以认为现有数字 1 至少是其他数字的两倍。
cpp
int dominantIndex(int* nums, int numsSize)
{
int m1=-1;
int m2=-1;
int index=-1;
for(int i=0;i<numsSize;i++)
{
if(nums[i]>m1)
{
m2=m1;
m1=nums[i];
index=i;
}else if(nums[i]>m2)
{
m2=nums[i];
}
}
return m1>=m2*2?index:-1;
//至少是其它值两倍,变成是次大值的两倍
}
三十二、
简单
363
相关企业
给你一个整数数组
nums
,将nums
中的的所有偶数元素移动到数组的前面,后跟所有奇数元素。返回满足此条件的 任一数组 作为答案。
示例 1:
输入:nums = [3,1,2,4] 输出:[2,4,3,1] 解释:[4,2,3,1]、[2,4,1,3] 和 [4,2,1,3] 也会被视作正确答案。
示例 2:
输入:nums = [0] 输出:[0]
cpp
int* sortArrayByParity(int* nums, int numsSize, int* returnSize){
int *arr=(int *)malloc(sizeof(int)*numsSize);
int count=0;
for(int i=0;i<numsSize;i++)
{
if(nums[i]%2==0)
{
arr[count++]=nums[i];
}
}
for(int i=0;i<numsSize;i++)
{
if(nums[i]%2==1)
{
arr[count++]=nums[i];
}
}
*returnSize=numsSize;
return arr;
}
用1次遍历+从后往前判断
cppint* sortArrayByParity(int* nums, int numsSize, int* returnSize){ int *arr=(int *)malloc(sizeof(int)*numsSize); int left=0,right=numsSize-1; for(int i=0;i<numsSize;i++) { if(nums[i]%2==0) { arr[left++]=nums[i]; } else { arr[right--]=nums[i]; } } *returnSize=numsSize; return arr; }