算法刷题日志

news2024/10/5 14:29:37

在这里插入图片描述

今天是星期几就加上多少天在最后

public class Main {
    public static void main(String[] args) {
        System.out.println(Math.pow(20, 22) % 7 + 6);
    }
}

在这里插入图片描述

这题是判断左右回文,且要保持单调性,因为回文数左右对称所以只需要判断左边是否单调递增。


public class Main {
    public static void main(String[] args) {
        long start = System.currentTimeMillis();
        int count = 0;
        for (int i = 2022; i <= 2022222022; i++) {
            if (isPalindrome(i) && check(i)) {
                count++;
            }
        }
        long end = System.currentTimeMillis();
        System.out.println(count);
    }private static boolean check(int num) {
        String s = num + "";
        for (int i = 0; i < s.length() / 2; i++) {
            if (s.charAt(i) > s.charAt(i + 1)) return false;
        }
        return true;
    }private static boolean isPalindrome(int num) {
        String s = num + "";
        int n = s.length() - 1;
        for (int l = 0, r = n; l < r; l++, r --)
            if (s.charAt(l) != s.charAt(r)) return false;
        return true;
    }
}

在这里插入图片描述

先用数组统计每个字母出现次数,再用list来存放答案,循环遍历查找出现次数最多的并存入list之中,大于max就更新list,等于的话同样也可以存入list

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Main {
    static int[] a=new int[26];
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        String s=sc.next();
        for (int i = 0; i < s.length(); i++) {
            a[s.charAt(i)-'A']++;
        }
        int max=0;
        List<Integer> list=new ArrayList<>();
        for (int i = 0; i < 26; i++) {
            if (a[i]>max){
                list.clear();
                max=a[i];
                list.add(i);
            }else if (a[i]==max) list.add(i);
        }
        for (int i:list){
            System.out.print((char)(i+'A'));
        }
    }
}

最少刷题数

在这里插入图片描述

对于一个刷题数量为 a [ i ] 的同学,它增加后的刷题量应该在区间[a[i],100000]为了使得比他刷题多的学生不超过比他刷题少的学生,如果当他刷了 x 道题是符合要求的,那么大于 x 的答案也一定符合,但是小于 x 的答案却不一定符合,这就满足我们的二段性质,因此这道题可以使用二分,用数组cnt[i]统计分数为i的同学有多少位,然后将其变为前缀和数组即可。

import java.io.*;

public class Main{
    static int N = 200010;
    static int[] a = new int[N], cnt = new int[N];
    static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    static PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));

    public static void main(String[] args) throws IOException {
        int n=Integer.parseInt(br.readLine());
        String[] s = br.readLine().split(" ");
        for (int i = 0; i < n; i++) {
            a[i] = Integer.parseInt(s[i]);
            cnt[a[i]]++;
        }
        for (int i = 1; i <= 100000; ++i) {
            cnt[i] += cnt[i - 1];
        }
        for (int i = 0; i < n; ++i) {

            if (cnt[100000] - cnt[a[i]] <= cnt[Math.max(0,a[i]-1)]) {
                out.print(0 + " ");
                continue;
            }
            int l = a[i] + 1, r = 100000;
            while (l < r) {
                int mid = l + r >> 1;
                //因为要满足刷题多的人比自己刷题少的人数要小满足就说明mid是答案就更新r=mid
                if (cnt[100000] - cnt[mid] <= cnt[mid - 1] - 1) r = mid;
                else l = mid + 1;
            }
            out.print((r - a[i]) + " ");
        }
        out.flush();
    }
}

求阶乘

在这里插入图片描述

二分,由于是阶乘,可知 2 出现的次数一定比 5 多,所以我们只需要看 n ! 能拆分出多少个 5 ,则可知它的阶乘有多少个 0。
最后二分得到的答案还需要判断阶乘末尾0的个数是否恰好为 k 个,因为我们只能保证不少于 k 个,并不一定恰好是 k 个。

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        long k = sc.nextLong();
        long l = 1, r = (long) 9e18;
        while (l < r) {
            long mid = l + (r - l) / 2;
            if (query(mid) >= k) r = mid;
            else l = mid + 1;
        }
        long x = query(r);
        System.out.println(x == k ? r : -1);
    }

    static long query(long x) {
        long ans = 0;
        while (x > 0) {
        //不断筛选能拆分出1个 2个3个5的数有多少个,然后累加起来
            ans += x / 5;
            x /= 5;
        }
        return ans;
    }
}

在这里插入图片描述

import java.util.*;

/**
 * 类描述:TODO
 *
 * @author admin
 * @date 2023-02-21 08:25
 **/

public class Main1 {
    static  int N= 200010;
        public  static  int [] a =new int [N];
        public  static  Long [] f = new Long[N];
        public static int mod = 1000000007;
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n =sc.nextInt();
        for (int i = 1; i <=n; ++i) {
            a[i]=sc.nextInt();
        }
        f[0]=Long.valueOf(1);
        for (int i = 1; i <=n ; i++) {
            int mx=a[i],mi=a[i];
            for (int j = i; j >=1 ; j--) {
                mx=Math.max(mx,a[j]);
                mi=Math.min(mi,a[j]);
                if(mx-mi==i-j){
                    f[i]=(f[i]+f[j-1])%mod;
                }
            }
        }
        System.out.println(f[n]);
     }

}

1053. 交换一次的先前排列

在这里插入图片描述

这道题目的关键是 按字典序排列小于 A 的最大可能排列, 那么有
对当前序列进行逆序查找,找到第一个降序的位置 i,使得 A[i]>A[i+1]A[i]>A[i+1]A[i]>A[i+1]
由于 A[i]>A[i+1]A[i]>A[i+1]A[i]>A[i+1],必能构造比当前字典序小的序列
由于逆序查找,交换 A[i] 为最优解
寻找在 A[i] 最左边且小于 A[i] 的最大的数字 A[j]
由于 A[j]<A[]i]A[j] < A[]i]A[j]<A[]i], 交换 A[i] 与 A[j] 后的序列字典序一定小于当前字典序
由于 A[j] 是满足关系的最大的最左的,因此一定是满足小于关系的交换后字典序最大的

class Solution {
    public int[] prevPermOpt1(int[] A) {
        int len = A.length;
        int curMax = -1;
        int index = -1;
        boolean hasResult = false;
        for (int i = len - 2; i >= 0; i--) {
            if (A[i+1] < A[i]) {                    // 此处逆序,需要移动A[i]
                for (int j = i + 1; j < len; j++) { // 寻找与 A[i] 交换的位置
                   if (A[i] > A[j]) {               // 必须满足 A[i] > A[j],否则不能满足交换后的字典序小于原始字典序
                        hasResult = true;
                        if (A[j] > curMax) {        
                            curMax = A[j];
                            index = j;
                        }
                   } 
                }
                if (hasResult) {
                    int tmp = A[i];
                    A[i] = A[index];
                    A[index] = tmp;
                    return A;
                }
            }
        }
        return A;
    }
}

最大的和

在这里插入图片描述

设f[i]是1~i中连续和最大值,g[i]
是i~n中连续和最大值
则答案即max(f[i]+g[i+1]),
1<=i<=n-1
而f[i]怎么求呢,这里一定要细心,不能想当然!!!
以a[i]是否被选为界
1.没被选: f[i-1]即为所求
2.被选: 相当于求1~i中且以a[i]为结尾的连续和最大值

import java.util.*;

public class Main {
   public static  int N=500000;
   public    static  int []a=new int [N];
  public  static  int []g = new int [N];
  public  static  int []f= new int [N];

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int t = sc.nextInt();
        while(t-->0){
            int n = sc.nextInt();
            for (int i = 1; i <=n ; i++) {
                a[i]=sc.nextInt();
            }
            int s =0;
            Arrays.fill(g,-0x3f3f3f3f);
            Arrays.fill(f,-0x3f3f3f3f);
            for (int i = 1; i <=n ; i++) {
                s=Math.max(0,s)+a[i];
                f[i]=Math.max(f[i-1],s);
            }
            s =0;
            for (int i = n; i >=1; i--) {
                s=Math.max(0,s)+a[i];
                g[i]=Math.max(g[i-1],s);
            }
            int res =-0x3f3f3f3f;
            for (int i = 1; i <=n; i++) {
                res=Math.max(res,f[i]+g[i+1]);
            }
            System.out.println(res);
        }
    }


}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/416609.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

模拟信号隔离放大器变送器 导轨安装DIN11 IPO EM系列

概述&#xff1a; 导轨安装DIN11 IPO EM系列模拟信号隔离放大器是一种将输入信号隔离放大、转换成按比例输出的直流信号混合集成电路。产品广泛应用在电力、远程监控、仪器仪表、医疗设备、工业自控等需要电量隔离测控的行业。该模块内部嵌入了一个高效微功率的电源&#xff0…

yolov5详解与改进

https://github.com/z1069614715/objectdetection_script YOLOV5改进-Optimal Transport Assignment Optimal Transport Assignment&#xff08;OTA&#xff09;是YOLOv5中的一个改进&#xff0c;它是一种更优的目标检测框架&#xff0c;可以在保证检测精度的同时&#xff0c…

研究的艺术 (The craft of research) 读书笔记

前言 如果你对这篇文章感兴趣&#xff0c;可以点击「【访客必读 - 指引页】一文囊括主页内所有高质量博客」&#xff0c;查看完整博客分类与对应链接。 对于研究者而言&#xff0c;写作是一件很重要的事&#xff0c;好的写作不仅能让更多人愿意读&#xff0c;获得更大影响力&…

k8s学习-CKS真题-K8S安全策略PodSecurityPolicy

目录题目环境搭建解题参考题目 Task 使用 Trivy 开源容器扫描器检测 namespace kamino 中 Pod 使用的具有严重漏洞的镜像。 查找具有 High 或 Critical 严重性漏洞的镜像&#xff0c;并删除使用这些镜像的 Pod。 注意&#xff1a;Trivy 仅安装在 cluster 的 master 节点上&…

开源的全文搜索引擎总结,chatbot和chatgpt项目必备资源

全文搜索引擎就是通过从互联网上提取的各个网站的信息&#xff08;以网页文字为主&#xff09;而建立的数据库中&#xff0c;检索与用户查询条件匹配的相关记录&#xff0c;然后按一定的排列顺序将结果返回给用户。 1、Apache Lucene Java 全文搜索框架 许可证&#xff1a;Apa…

中文英文翻译-英翻中文在线翻译

如果您需要将大量的英文文件或网页翻译成中文&#xff0c;那么我们的批量翻译英文翻译中文的软件将是您最佳的选择。我们的软件是一款高效、准确、节省时间的翻译工具&#xff0c;可以在最短时间内完成大量英文文本的翻译&#xff0c;让您在工作生活中处处流畅地处理英语文本。…

【云原生进阶之容器】第六章容器网络6.4.3--Flannel网络模式

《云原生进阶之容器》专题索引: 第一章Docker核心技术1.1节——Docker综述第一章Docker核心技术1.2节——Linux容器LXC第一章Docker核心技术1.3节——命名空间Namespace第一章Docker核心技术1.4节——chroot技术第一章Docker核心技术1.5.1节——cgroup综述

算法套路八——二叉树深度优先遍历(前、中、后序遍历)

算法套路八——二叉树深度优先遍历&#xff08;前、中、后序遍历&#xff09; 算法示例&#xff1a;LeetCode98&#xff1a;验证二叉搜索树 给你一个二叉树的根节点 root &#xff0c;判断其是否是一个有效的二叉搜索树。 有效 二叉搜索树定义如下&#xff1a; 节点的左子树只…

网络原理——网络协议

目录传输层协议TCP协议TCP协议格式段TCP原理连接管理可靠传输流量控制拥塞控制延迟应答和捎带应答错误检测TCP异常UDP协议UDP协议格式段UDP协议特点无连接不可靠面向数据报大小受限网络层协议IP协议数据链路层协议​以太网MTUARP协议传输层协议 ​ 传输层负责数据能够从发送端…

学Vue3这一篇就够了!

目录学习Vue的前提是掌握 HTML,CSS,Js中级知识vue介绍声明式渲染条件与循环处理用户输入组件化应用构建Vue与自定义元素的关系应用和组件实例Vue实例根组件组件实例 property生命周期钩子实例的生命周期图模板语法插值文本原始 HTMLAttribute使用 JavaScript 表达式指令参数动态…

不黑学孙溟㠭匪石社寒山寺游记

昔日寒山问拾得曰&#xff1a;世间谤我、欺我、辱我、笑我、轻我、贱我、恶我、骗我、如何处治乎&#xff1f;拾得云&#xff1a;只是忍他、让他、由他、避他、耐他、敬他、不要理他、再待几年你且看他。 经典对话显修行。是否文殊、普贤再来都不重要。因缘使然&#xff0c;朋友…

C++ :JSON 解析系统的设计与实现

JSON JavaScript Object Notation(JavaScript 对象表示法) 定义 存储和交换文本信息的语法&#xff0c;类似 XML&#xff1b; 比 XML 更小、更快&#xff0c;更易解析&#xff0c;属于轻量级的文本数据交换格式&#xff1b; 使用 Javascript语法来描述数据对象&#xff0c;但…

PMP学习笔记

day01 裸考1 题目1: 下列哪一项不属于项目的特征? D A:独特性 B:临时性 C:渐进明细 D:重复性 解析:重复性属于运营 题目2: 在确定项目目标时,应该更加关注哪一个? D A:进度要求 B:成本预算 C:质量标准 D:同等关注进度,成本和质量要求 前沿 管理的基础 三个学…

Hashicorp Vault(金库)

什么是Vault? HashiCorp Vault 是一个基于身份的秘密和加密管理系统。机密是您想要严格控制访问的任何内容,例如 API 加密密钥、密码和证书。Vault 提供由身份验证和授权方法门控的加密服务。使用 Vault 的 UI、CLI 或 HTTP API,可以安全地存储和管理、严格控制(限制)和审…

微服务高级篇【1】之微服务保护

文章目录前言一 初识Sentinel1.1 雪崩问题1.2 解决方法1.3 小结1.4 服务保护技术对比1.5 Sentinel介绍1.6 Sentinel安装1.7 微服务整合Sentinel二 测试工具&#xff1a;Jmeter2.1 Jmeter安装和配置2.2 Jmeter快速入门2.2.1 设置中文语言2.2.2 设置Jmeter桌面快捷图标2.3 Jmeter…

Spring————java的反射机制,Spring的IOC和DI

一、认识Spring 1.1、Spring家族 SpringFramework&#xff1a; Spring框架&#xff1a;是Spring中最早核心的技术&#xff0c;也是所有其他技术及的基础。 SpringBoot:Spring是用来简化开发。而SpringBoot是来帮助Spring在简化的基础上能更快速进行开发。 SpringCloud&#xf…

FreeRTOS 任务相关 API 函数(一)

文章目录一、任务创建和删除 API 函数1. xTaxkCreate()2. xTaskCreateStatic()3. xTaskCreateRestricted()4. vTaskDelete()二、任务创建和删除实验(动态方法)三、任务创建和删除实验(静态方法)一、任务创建和删除 API 函数 FreeRTOS 最基本的功能就是任务管理&#xff0c;而任…

AcWing4957.飞机降落——学习笔记

目录 题目 代码 AC结果 思路 〇、例子 一、获取数据 二、深度优先遍历&#xff08;DFS&#xff09; 1.入参 2.出口 3.判断是否找到安全降落方案 4.递推过程 5.回溯过程 6.DFS完整代码 三、输出打印 题目 4957. 飞机降落 - AcWing题库https://www.acwing.com/pr…

打开 plist 文件

​ 对于使用苹果的进阶或资深玩家来说&#xff0c;有时候要编辑plist文件&#xff0c;比如要弄两个qq&#xff0c;要修改info.plist下的sku&#xff0c;而要是没有工具&#xff0c;就不能随意查看和编辑plist文件了。再有&#xff0c;可能要通过修改plist来破解某些游戏&#x…

windows服务器自带IIS搭建网站并发布公网访问【内网穿透】

文章目录1.前言2.Windows网页设置2.1 Windows IIS功能设置2.2 IIS网页访问测试3. Cpolar内网穿透3.1 下载安装Cpolar3.2 Cpolar云端设置3.3 Cpolar本地设置4.公网访问测试5.结语转载自远程源码文章&#xff1a;【IIS搭建网站】本地电脑做服务器搭建web站点并公网访问「内网穿透…