当前位置: 首页 > news >正文

【刷题】优选算法

优选算法

双指针

202. 快乐数

链接:. - 力扣(LeetCode)

【思路】

第一个实例是快乐数,因为会变为1且不断是1的循环

第二个实例不可能为1,因为会陷入一个没有1的循环

根据两个实例和鸽巢原理可以发现不断的平方和最终都会形成环,所以我们可以联想到用快慢指针,慢指针走一步,快指针走两步,最终会在环相遇,判断相遇时是否为1。

    //‘平分和’操作int squareSum(int num){int sum = 0;while(num){int unit = num % 10;num /= 10;sum += unit*unit;}return sum;}bool isHappy(int n) {//快慢指针int fast = n, slow = n;//相遇才停下do {//慢指针操作一次slow = squareSum(slow);//快指针操作两次fast = squareSum(squareSum(fast));} while(fast != slow);//相遇的值等于1才行return slow == 1;}

11. 盛最多水的容器

链接:. - 力扣(LeetCode)

【思路】

容量 = 底(下标相减) * 高(数组元素较小值)

如图,我们先算出最左边(1)和最右边(7)围起来的容量,然后,7不动,1继续和7的左边3,8,4...遍历算出容量,你会发现底是不断缩短的,同时高一直都是1,因为高只有两种情况,比它小或和它相等,所以1和7左边的值算出来的容量都是比1和7的容量小的,因为底在不断变小同时高可能不变也可能变小。

所以可以得出结论,每次算完容量后,元素较小的直接移动,不用遍历其他结果。

    int maxArea(vector<int>& height) {int head = 0, tail = height.size() - 1;int final_cap = 0;while(head < tail){//计算容量,保留较大值int capacity = (tail - head) * min(height[head], height[tail]);   final_cap = max(final_cap, capacity);//思路的推断移动高度小的一方if(height[head] < height[tail]){++head;}else{--tail;}}return final_cap;}

611. 有效三角形的个数

链接:. - 力扣(LeetCode)

【思路】

判断三角形:最长边小于其它边之和。

先排序获取单调性配合双指针解决问题。

先固定最长边,然后先从剩下的区间两端作为另外两条边,2+9>10,同时因为单调性,left的右边都比left大,所以right和左边任意一条组合都大于10,计算完组合后, right--继续找下一条边,此时2+5<10,因为单调性,right的左边都比right小,所以left和right左边的任意一条组合都小于10,排除left,left++, 继续找下一条边,这样一个区间找完就视为完成一次最大边的固定,需要固定下一条最大边,直到固定完所有最大边,最后一条最大边是倒数第三条,因为还剩最后两条构不成三角形。

    int triangleNumber(vector<int>& nums) {//排序获取单调性sort(nums.begin(), nums.end());//固定一个最大边int ret = 0;for(int i = nums.size() - 1; i >= 2; --i){//将区间两端作为两条边,不断缩小int left = 0, right = i - 1;while(left < right){if(nums[left] + nums[right] > nums[i]){ret += right - left;--right;}else{++left;}}}return ret;}

http://www.lryc.cn/news/478387.html

相关文章:

  • Python 在PDF中绘制形状(线条、矩形、椭圆形等)
  • 《今日制造与升级》是什么级别的期刊?是正规期刊吗?能评职称吗?
  • loading为什么不更新
  • Rust 力扣 - 1652. 拆炸弹
  • 使用Golang实现开发中常用的【并发设计模式】
  • 基于Zynq FPGA对雷龙SD NAND的性能测试评估
  • 4.WebSocket 配置与Nginx 的完美结合
  • Docker:镜像构建 DockerFile
  • 浮动路由:实现出口线路的负载均衡冗余备份。
  • 二叉树的遍历和线索二叉树
  • SpringBoot3 集成Junit4
  • Scala的set的添加删减和查询
  • 基于微信小程序的移动学习平台的设计与实现+ssm(lw+演示+源码+运行)
  • 【spark面试题】RDD和DataFrame以及DataSet有什么异同
  • [Python]关于Tensorflow+Keras+h5py+numpy一些骚操作备忘
  • 深度学习:Transformer 详解
  • jmeter 性能测试步骤是什么?
  • 前端入门一之JS最基础、最基础语法
  • 解决Swp交换空间被占满问题
  • 草地景观中的土地覆被变化:将增强型大地遥感卫星数据组成、LandTrendr 和谷歌地球引擎中的机器学习分类与 MLP-ANN 场景预测相结合
  • 【c++语言程序设计】字符串与浅层复制(深拷贝与浅拷贝)
  • 《TCP/IP网络编程》学习笔记 | Chapter 4:基于TCP的服务器端/客户端(1)
  • 深入解析gdb -p 与gdb attach 的区别与使用场景
  • C语言 | Leetcode C语言题解之第542题01矩阵
  • 论文阅读笔记:Image Processing GNN: Breaking Rigidity in Super-Resolution
  • 前端介绍|基础入门-html+css+js
  • [WSL][桌面][X11]WSL2 Ubuntu22.04 安装Ubuntu桌面并且实现GUI转发(Gnome)
  • PMC如何根据实际情况调整生产作业计划?
  • unity中 骨骼、纹理和材质关系
  • 18、论文阅读:AOD-Net:一体化除雾网络