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

【算法刷题】Day8

文章目录

  • 202. 快乐数
    • 解法:
  • 11. 盛最多水的容器
    • 解法:

202. 快乐数

在这里插入图片描述
在这里插入图片描述
原题链接


拿到题,我们先看题干
把一个整数替换为每个位置上的数字平方和,有两种情况:

  1. 重复这个过程始终不到 1(无限死循环)
  2. 结果变成 1(快乐数)

接下来我们画图看一下是不是这两种情况
在这里插入图片描述
在这里插入图片描述
画完图我们就可以发现,这个跟曾经数据结构学过的判断链表是否有环非常相似
判断是不是快乐数,就是看入环的数字是几,如果是 1 那么就是快乐数

解法:

(快慢双指针)

  1. 定义快慢双指针 slow 和 fast
  2. 慢指针每次向后移动一位
    快指针每次向后移动两位
  3. 判断相遇的值是不是 1
class Solution {
    public int isSum(int n) {
        int sum = 0;
        while(n != 0) {
            int t = n % 10;
            sum += t*t;
            n = n / 10;
        }
        return sum;
    }

    public boolean isHappy(int n) {
        int slow = n;
        int fast = isSum(n);
        while(slow != fast) {
            slow = isSum(slow);
            fast = isSum(isSum(fast));
        }
        return slow == 1;
    }
}

在这里插入图片描述

11. 盛最多水的容器

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
[原题链接](https://leetcode.cn/problems/container-with-most-water/


先看题干,貌似就是求体积,再看示例,就是求两段之间最小的那个值 乘 两段之间的差值

解法:

一:(暴力枚举)
运用两个 for 循环进行枚举
但是时间复杂度为 O(n2)
会导致时间溢出

二:(利用单调性,使用双指针)
这里我们先看一下什么是单调性
在这里插入图片描述
先用 [ 6, 2, 5, 4 ] 来举例
6 > 4
所以如果 4 不变,从右向左一个一个计算体积
4 * 3 = 12
2 * 2 = 4
4 * 1 = 4
发现只有第一个的体积是最大的
这样我们可以直接删去 4 ,从 6 开始向 5 进行遍历
这就是单调性

利用这样的规律,我们在看原数组,我们就可以这样解题
在这里插入图片描述

  1. 定义双指针 left 和 right
  2. 把 最大的体积存放到 ret 中
  3. left 和 right 比较大小
    left < right : left ++;
    left > right : right–;
  4. 直到 left 和 right 相遇
class Solution {
    public int maxArea(int[] height) {
        int left = 0;
        int right = height.length-1;
        int ret = 0;
        while(left < right) {
            int v = Math.min(height[left],height[right]) * (right - left);
            ret = Math.max(ret,v);
            if(height[left] < height[right]) {
                left++;
            }else {
                right--;
            }   
        }
        return ret;
    }
}

在这里插入图片描述


http://www.kler.cn/news/149464.html

相关文章:

  • 华为认证大数据工程师(HCIA-Big Data)--练习题
  • 在微服务架构中的数据一致性
  • 第二十章——多线程
  • 比尔盖茨:GPT-5不会比GPT-4好多少,生成式AI已达到极限
  • Jtti:linux中udp怎么判断是否接收到数据?
  • Linux 启动过程
  • hive- 18~18区间找最晚批次
  • 吃火锅(Python)
  • [个人笔记] Git的CLI笔录
  • cddd 安装指南(pip install cddd)
  • 延时任务定时发布,基于 Redis 与 DB 实现
  • 【蓝桥杯选拔赛真题26】C++字符串逆序 第十三届蓝桥杯青少年创意编程大赛C++编程选拔赛真题解析
  • Python之内置函数和模块
  • 小而美:持续盈利的经营法则
  • 医疗影像数据集—CT、X光、骨折、阿尔茨海默病MRI、肺部、肿瘤疾病等图像数据集
  • 汽车悬架底盘部件自动化生产线3d检测蓝光三维测量自动化设备-CASAIM-IS(2ND)
  • PC端ssh连接到Android手机的Termux部署http服务器
  • NX二次开发UF_MTX3_vec_multiply_t 函数介绍
  • 基于字面的文本相似度计算和匹配搜索
  • 力扣101. 对称二叉树
  • DelayQueue介绍
  • 河道水质在线监测系统:守护河流的生命力
  • 河北中洺科技-数据标注是怎样工作的?
  • 3d模型的中心原点有偏移怎么办?
  • 业余时间用Ruby写个爬取亚马逊爆品,让自己有机会挣点外快
  • 硝烟弥漫的科技战场——GPT之战
  • Java研学-IO流(一)
  • Python与设计模式--模板模式
  • 一篇总结 Linux 系统启动的几个汇编指令
  • java springboot测试类鉴定虚拟MVC运行值与预期值是否相同