本文主要是介绍日拱一卒,月进一步(11),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
414. 第三大的数 - 力扣(LeetCode)
思路一:
先用qsort函数,将数组的元素从小到大排序。qsort(首元素地址,元素个数,字节数,比较函数)
再用differ标记不同的元素个数当前一个元素不等于后面一个元素,differ++,当differ等于2时候,且此时后一个元素仍然不等于前一个元素,就说明这个数字是第三大的元素。
int cmp(const void*a,const void*b)
{return *(int*)a<*(int*)b;
}int thirdMax(int* nums, int numsSize){qsort(nums,numsSize,sizeof(nums[0]),cmp);int differ=0;for(int i=1;i<numsSize;i++){if(nums[i]!=nums[i-1]&&++differ==2)//必须满足前一个数不等于后面的数,diff才能++{return nums[i];}}return nums[0];
}
思路二:
int thirdMax(int* nums, int numsSize){ // 初始化三个变量为 LONG_MIN,这是 long 类型可以表示的最小值。 // 这样做是为了确保在数组中即使存在负数,这些变量也能被正确地更新。 long first = LONG_MIN; long second = LONG_MIN; long third = LONG_MIN; // 遍历数组中的每一个元素 for (int i = 0; i < numsSize; i++) { // 如果当前元素比 first(当前已知的最大值)还要大 if (nums[i] > first) { /* nums[i] > a */ // 更新 third、second 和 first // 注意这里的更新顺序,确保了在更新时不会丢失之前的信息 third = second; second = first; first = nums[i]; } // 如果当前元素比 second 大但比 first 小 else if (nums[i] > second && nums[i] < first) { /* a > nums[i] > b */ // 更新 third 和 second third = second; second = nums[i]; } // 如果当前元素比 third 大但比 second 小 else if (nums[i] > third && nums[i] < second) { /* b > nums[i] > c */ // 更新 third third = nums[i]; } } // 如果 third 仍然是 LONG_MIN,说明数组中不存在三个不同的数,或者最大值和次大值重复出现多次 // 此时返回 first(即最大值)作为默认结果(尽管它可能不是第三大的数,但题目没有明确要求在这种情况下应该返回什么) return (third == LONG_MIN) ? first : third;
}
448. 找到所有数组中消失的数字 - 力扣(LeetCode)
有些元素出现了一次,有的元素没有出现过,要求找到没有出现过的数字。
我们可以利用数组nums
本身的索引和值之间的关系来找到缺失的数字。由于nums[i]
的范围是[1, n]
,我们可以将nums[i]
的值映射到索引nums[i] - 1
上,并将该索引处的元素取反(或者做其他标记,比如加上一个固定的值)。然后,我们再次遍历数组,找到那些未被取反(或未被标记)的索引,它们对应的值就是缺失的数字。
/*** Note: The returned array must be malloced, assume caller calls free().*/
int* findDisappearedNumbers(int* nums, int numsSize, int* returnSize){int*result=(int*)malloc(numsSize*sizeof(int));*returnSize=0;for(int i=0;i<numsSize;i++){int index=nums[i]-1;if(index>=0&&index<numsSize){nums[index]=-nums[index];//取反或者标记}}for(int i=0;i<numsSize;i++){if(nums[i]>0){result[(*returnSize++)]=i+1;//索引+1得到缺失的数字}}return result;
}
这篇关于日拱一卒,月进一步(11)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!