日拱一卒,月进一步(11)

2024-05-02 17:20
文章标签 进一步

本文主要是介绍日拱一卒,月进一步(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)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/954769

相关文章

LlamaIndex结合DSPy,进一步优化RAG系统

大家好,本文将介绍如何运用LlamaIndex和DSPy这两个工具来构建和优化检索增强型生成(Retrieval-Augmented Generation, RAG)系统。通过这两个框架的无缝结合,不仅能够简化开发过程,还能显著提高RAG系统的整体性能。接下来,将详细解析LlamaIndex与DSPy如何高效协同,带来1+1>2的效果。 1.LlamaIndex LlamaIndex 是用于构

PolarDB之后,PawSQL如何进一步优化相关标量子查询?

在数据分析领域里,相关标量子查询无疑是一把双刃剑:它功能强大,能解决许多复杂问题,同时又因其复杂性给数据库优化器带来了不小的挑战。当前,只有像Oracle这样的商业数据库巨头在这方面做得相对出色[1],在国产数据库领域,也只有PolarDB对其提供了一定的支持[2]。 除了PolarDB,领先的SQL优化引擎PawSQL也提供了对相关标量子查询进行基于成本的重写优化;此外,PawSQL还会合并查

阿里巴巴宣布 Sentinel 开源,进一步完善 Dubbo 生态(附PPT)

Aliware Open Source•深圳站现场   1、当服务量大到一定程度,流量扛不住的时候,该如何处理? 2、应用之间相互依赖,当应用A出现响应时间过长,影响到应用B的响应,进而产生连锁反应影响整个依赖链上的所有应用,该如何处理?   随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服

【DCVRP】元启发式算法进一步优化

为什么加入元启发式算法? DCVRP-IMGR的求解质量可以快速的达到10%之内,但在DCVRP_IMGR生成方案完成后至下一个动态事件发生之间存在一段时间,当动态事件发生的非常频繁,这段时间可能会非常短暂,然而动态事件发生得不是太频繁或者存在2个动态事件时间较长的情况下(这在实际配送中是比较常见的),这段时间的长度可能就足够采用更复杂的元启发式算法,以进一步改进DCVRP-IMGR生成的方案。

activiti中一些listener抛出的自定义Exception被进一步封装无法被流程控制层捕获

今天在利用activiti进行接口开发的时候发现底层代码抛出的错误被activiti进行了进一步的封装成了runtimeException,而主动抛出的错误信息整体被作为runtimeException的detailMessage信息进行保存。经过研究发现实际上在listener中抛出的异常信息在流程操作层是可以捕获到的,只有当抛出异常的位置为调用的dubbo所提供的接口时才会出现这样的情况。

python并发与并行(十一) ———— 让asyncio的事件循环保持畅通,以便进一步提升程序的响应能力

前一篇blog说明了怎样把采用线程所实现的项目逐步迁移到asyncio方案上面。迁移后的run_tasks协程,可以将多份输入文件通过tail_async协程正确地合并成一份输出文件。 import asyncio# On Windows, a ProactorEventLoop can't be created within# threads because it tries to regi

如何进一步自我提升?

如何进一步自我提升? 思考,语言组织和沟通能力,把自己沟通中不自信的东西去除掉。 业务响应能力。 抓重点。深度上,思考出彩的点,聚焦在核心的业务上,如何做出花来。 技术重点是什么?想清楚再做,设计的亮点在哪里。 作为TM,协调资源和调度,事情做完了,只是第一步。业务有没有价值,能不能把核心价值的点拿过来做。 一定要有产出(文档,ata),阶段性review,总结粒度不能太细和太粗。

进一步理解C++构造与析构

在之前的浅析C++智能指针一文中,我们提到过, 在C语言中我们用malloc和free来申请和释放内存。 而在C++语言中,我们常用new与delete来申请和释放内存。 我们要知道,new,delete与malloc,free是有区别的,new一个对象时,我们不仅申请了内存同时构造了对象,delete一个对象时,我们不仅释放了内存还销毁了对象。   那么我们在C++中想分开操作或

.NET应用UI框架DevExpress XAF v24.1 - 可用性进一步增强

DevExpress XAF是一款强大的现代应用程序框架,允许同时开发ASP.NET和WinForms。DevExpress XAF采用模块化设计,开发人员可以选择内建模块,也可以自行创建,从而以更快的速度和比开发人员当前更强有力的方式创建应用程序。 在DevExpress XAF v24.1新版中全新升级了支持CRUD操作、进一步增强了可用性等,欢迎下载最新版体验! DevExpress v

【Cesium学习】着色器详解【待进一步总结】

在Cesium中,drawCommand 和 CustomShader 是与渲染管线和自定义渲染效果相关的两个重要概念,但它们各自有不同的作用和应用场景。下面我将分别详解这两个概念。 drawCommand drawCommand 是 Cesium 渲染引擎内部使用的一个概念,它代表了单个渲染命令,通常包含了一组需要被WebGL API绘制的顶点和相应的渲染状态(如着色器程序、材质属性等)。在