學習日記,java与写题目

news2024/11/15 21:50:54

开篇来个每日一题

1419. 数青蛙

难度中等185收藏分享切换为英文接收动态反馈

给你一个字符串 croakOfFrogs,它表示不同青蛙发出的蛙鸣声(字符串 "croak" )的组合。由于同一时间可以有多只青蛙呱呱作响,所以 croakOfFrogs 中会混合多个 “croak” 

请你返回模拟字符串中所有蛙鸣所需不同青蛙的最少数目。

要想发出蛙鸣 "croak",青蛙必须 依序 输出 ‘c’, ’r’, ’o’, ’a’, ’k’ 这 5 个字母。如果没有输出全部五个字母,那么它就不会发出声音。如果字符串 croakOfFrogs 不是由若干有效的 "croak" 字符混合而成,请返回 -1 。

示例 1:

输入:croakOfFrogs = "croakcroak"
输出:1 
解释:一只青蛙 “呱呱” 两次

示例 2:

输入:croakOfFrogs = "crcoakroak"
输出:2 
解释:最少需要两只青蛙,“呱呱” 声用黑体标注
第一只青蛙 "crcoakroak"
第二只青蛙 "crcoakroak"

示例 3:

输入:croakOfFrogs = "croakcrook"
输出:-1
解释:给出的字符串不是 "croak" 的有效组合。

感觉思路还是明显的,没有给数据范围,统一认为不大

那我们直接记录每个数字出现的次数即可,但是呀,前面的数字出现的次数要大于等于后面的(依序输出),违反了就是-1,还有出现其他的字母也是返回-1

用swith就可以解决了,看我的代码啊哈哈哈

int minNumberOfFrogs(char * croakOfFrogs){
int a[5]={0};

    int res = 0, flag = 5;
    for(int i = 0; i < strlen(croakOfFrogs); i++)
    {
        switch(croakOfFrogs[i])
        {
            case 'c':
                if(a[0] == 0)
                    flag--;
                a[0]++;
                break;
            case 'r':
                if(a[0] - a[1] <= 0)   
                    return -1;
                if(a[1] == 0)
                    flag--;
                a[1]++;
                break;
            case 'o':
                if(a[1] - a[2] <= 0) 
                    return -1;
                if(a[2] == 0)
                    flag--;
                a[2]++;
                break;
            case 'a':
                if(a[2] - a[3] <= 0) 
                    return -1;
                if(a[3] == 0)
                    flag--;
                a[3]++;
                break;
            case 'k':
                if(a[3] - a[4] <= 0)  
                    return -1;
                if(a[4] == 0)
                    flag--;
                a[4]++;
                break;
            default:
                return -1;
        }
        if(flag == 0)
        {
            if(res < a[0])
                res = a[0];
            for(int j = 0; j < 5; j++)
            {
                a[j]--;
                if(a[j] == 0)
                    flag++;
            }
        }
    }
    if(flag != 5)              
        return -1;
    return res;

}

有很多的方法去写,判断以及输出结果,都是可以有自己的思路的,脑袋清晰,就是薄纱 

来上前天为难我的题目,可恶不够细节,老是内存报错,数组总是开的不对,这题目又给我上了一课

可恶啊啊啊啊啊

2106. 摘水果

难度困难129收藏分享切换为英文接收动态反馈

在一个无限的 x 坐标轴上,有许多水果分布在其中某些位置。给你一个二维整数数组 fruits ,其中 fruits[i] = [positioni, amounti] 表示共有 amounti 个水果放置在 positioni 上。fruits 已经按 positioni 升序排列 ,每个 positioni 互不相同 。

另给你两个整数 startPos 和 k 。最初,你位于 startPos 。从任何位置,你可以选择 向左或者向右 走。在 x 轴上每移动 一个单位 ,就记作 一步 。你总共可以走 最多 k 步。你每达到一个位置,都会摘掉全部的水果,水果也将从该位置消失(不会再生)。

返回你可以摘到水果的 最大总数 。

示例 1:

输入:fruits = [[2,8],[6,3],[8,6]], startPos = 5, k = 4
输出:9
解释:
最佳路线为:
- 向右移动到位置 6 ,摘到 3 个水果
- 向右移动到位置 8 ,摘到 6 个水果
移动 3 步,共摘到 3 + 6 = 9 个水果

示例 2:

输入:fruits = [[0,9],[4,1],[5,7],[6,2],[7,4],[10,9]], startPos = 5, k = 4
输出:14
解释:
可以移动最多 k = 4 步,所以无法到达位置 0 和位置 10 。
最佳路线为:
- 在初始位置 5 ,摘到 7 个水果
- 向左移动到位置 4 ,摘到 1 个水果
- 向右移动到位置 6 ,摘到 2 个水果
- 向右移动到位置 7 ,摘到 4 个水果
移动 1 + 3 = 4 步,共摘到 7 + 1 + 2 + 4 = 14 个水果

示例 3:

输入:fruits = [[0,3],[6,4],[8,5]], startPos = 3, k = 2
输出:0
解释:
最多可以移动 k = 2 步,无法到达任一有水果的地方

提示:

  • 1 <= fruits.length <= 105
  • fruits[i].length == 2
  • 0 <= startPos, positioni <= 2 * 105
  • 对于任意 i > 0 ,positioni-1 < positioni 均成立(下标从 0 开始计数)
  • 1 <= amounti <= 104
  • 0 <= k <= 2 * 105

还是一样的,滑动窗口加上前缀和的核心,我们是可以选择,向左在向右,或者向右再向左,枚举每个步数,用前缀和快速得出答案,最后取最大的

有几点的细节要注意了,你的最大的位移是 k+starpos,但是水果的分布可能大于最大位移点,也可能小于,但是我们要取的是二者的最大,都要包含(在这上面跪了一天了,无语了)

前缀和只要左边界大于0就可以了右边界无关紧要,超出了也是正确的答案(我之前想限定边界,额真脑壳有问题)

上代码看看吧

int max(int a,int b){
    if(a>b){
    return a;}
    else{
    return b;}
}

int maxTotalFruits(int** fruits, int fruitsSize, int* fruitsColSize, int startPos, int k){
    int len=max(fruits[fruitsSize-1][0],startPos+k)+1;

int *qian = (int*)calloc(len, sizeof(int));
int *qians = (int*)calloc(len, sizeof(int));
 
    qians[fruits[0][0]]=fruits[0][1];

   for(int j=1;j<fruitsSize;j++){
       qians[fruits[j][0]]=fruits[j][1];       
   }
   qian[0]=qians[0];
   for(int h=1;h<len;h++){
       qian[h]=qian[h-1]+qians[h];
   }

   int maxr=0;
   for(int h=0;h<=k;h++){
     int y = (k-h) / 2;

        int l = startPos - h;
        int r = startPos + y;
        l= (l < 0 ? 0 : l);
        int he = qian[r] - qian[l] + qians[l];
        maxr = max(maxr, he);
        l = startPos - y;
        r = startPos + h;
        he = 0;
        l = (l < 0 ? 0 : l);
        he = qian[r] - qian[l] + qians[l];
        maxr = max(maxr, he);
   }
   
   return maxr;
}

可能有人会问,哎要是往一个方向走, 

回不来了,那样计算的结果就会出戳,额确实是的,我考虑了一下,确实如此,但是上面的y的计算的方式确实完美的规避这个问题,确实还可以的呀

哈哈细心就会赢的,哎哎呀我真的是

今天还是进行了,java的学习,都不难全凭记忆

太黑了,明天发笔记

主要是学习了,集合,以及stringbuild的一点点的底层逻辑,

还有集合的,增删改查

哈哈下面有一些我在自己点脑上写的东西

目前的进度是黑马程序员的java课程115集的样子

 

 

 

 

 

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

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

相关文章

冯诺依曼+OS+进程+进程状态

索引 一.冯诺依曼理解二.OS 进程的初步认识1.什么是进程&#xff1f;2.如何查看进程3.父进程与子进程4.进程状态1.S阻塞态R运行态2.D阻塞&#xff08;不可中断&#xff09;3.Z僵尸状态andX死亡状态4.孤儿进程5&#xff0c;进程死亡之后OS做了什么五.状态总结&#xff1a; 一.冯…

数据库系统工程师 —— 第六章 数据库技术基础

文章目录 &#x1f4c2; 第六章、数据库技术基础 &#x1f4c1; 6.1 基本概念 &#x1f4d6; 6.1.1 数据库与数据库管理系统 &#x1f4d6; 6.1.2 数据库技术的发展 &#x1f4d6; 6.1.3 DBMS的功能和特点 &#x1f4d6; 6.1.4 数据库系统的体系结构 &#x1f4d6; 6.1.5 数据库…

极致鸿蒙——华为MatePad系列安装AidLux,一个自带vscode的Python编译环境

看着刚刚人入手的华为鸿蒙系统MatePad11平板&#xff0c;是如此的美轮美奂&#xff0c;但是总感觉少了点什么&#xff0c;少了点什么呢&#xff1f;是编程环境&#xff0c;我爱MatePad&#xff0c;也爱编程&#xff0c;那如果可以在MatePad上编程&#xff0c;会发生什么&#x…

Ae:3D 变换小工具与 3D 轴模式

◆ ◆ ◆ 3D 变换小工具 3D 变换小工具 3D Gizmo是用不同颜色标志的直观的调整工具&#xff0c;可用来缩放、定位和旋转 3D 图层、摄像机图层和灯光图层。 如上图所示&#xff0c;不同的颜色表示不同的轴。红色表示 X 轴&#xff0c;绿色表示 Y 轴&#xff0c;蓝色表示 Z 轴。…

有趣的 Kotlin 0x15:data object

简介 Kotlin 早在 1.7.20版本就引入了一种新的对象声明类型&#xff1a;data object&#xff0c;但是处于Experimental 阶段 。data object 与常规object 在概念上表现一致&#xff0c;但带有开箱即用且语义清晰的 toString 函数。而在 1.8.20 版本&#xff0c;data class 的语…

webstorm 创建harthat项目

Getting started with Hardhat | Ethereum development environment for professionals by Nomic FoundationGetting started with Hardhathttps://hardhat.org/hardhat-runner/docs/getting-started#quick-start安装环境 npm install --save-dev hardhat 创建项目 npx hard…

基数树RadixTree

转自&#xff1a;基数树RadixTree - 知乎 1. 基数树概述 对于长整型数据的映射&#xff0c;如何解决Hash冲突和Hash表大小的设计是一个很头疼的问题。radix树就是针对这种稀疏的长整型数据查找&#xff0c;能快速且节省空间地完成映射。借助于Radix树&#xff0c;我们可以实现…

IntelliJ IDEA Run时报“无效的源发行版:16“错误

在新建Java项目时&#xff0c;run运行main方法时&#xff0c;报错 “java: 错误: 无效的源发行版&#xff1a;16”&#xff0c;了解一番后原来自己创建项目时&#xff0c;Project language level 没有和Project SDK版本相匹配。 还原创建项目步骤&#xff1a; 一、创建项目 …

Python语音增强

img { margin: auto; display: block } 简介 音频时域波形具有以下特征&#xff1a;音调&#xff0c;响度&#xff0c;质量。我们在进行数据增强时&#xff0c;最好只做一些小改动&#xff0c;使得增强数据和源数据存在较小差异即可&#xff0c;切记不能改变原有数据的结构&…

3.0 响应式系统的设计与实现

1、Proxy代理对象 Proxy用于对一个普通对象代理&#xff0c;实现对象的拦截和自定义&#xff0c;如拦截其赋值、枚举、函数调用等。里面包含了很多组捕获器&#xff08;trap&#xff09;&#xff0c;在代理对象执行相应的操作时捕获&#xff0c;然后在内部实现自定义。 const…

将PDF文件转换为JPG格式图片的3种简单方法

如何在线将PDF文件转换成图片格式&#xff1f;如果您在使用PDF文件时只需要其中一页或几页的内容&#xff0c;将PDF转换为图片可以使您更方便地使用这些内容。下面介绍三种简单易用的PDF转图片的方法。 方法一&#xff1a;记灵在线工具 记灵在线工具是一个免费的在线PDF转换工…

方太也造车?

听说方太也造车了&#xff1f; 造车闹剧层出不穷 近年来&#xff0c;随着智能汽车概念的风行&#xff0c;各大品牌也掀起了一股造车的热潮。一时间&#xff0c;互联网、房地产、家电、手机……各行各业的企业都纷纷粉墨登场&#xff0c;各种造车闹剧层出不穷。 然而很快人们就发…

【三十天精通Vue 3】第二十七天 如何用Vue 3和TensorFlow.js实现人脸识别Web应用?

✅创作者:陈书予 🎉个人主页:陈书予的个人主页 🍁陈书予的个人社区,欢迎你的加入: 陈书予的社区 🌟专栏地址: 三十天精通 Vue 3 文章目录 引言一、项目简介1.1 概述1.2 功能特点1.3 技术栈二、准备工作2.1 环境搭建2.2 项目初始化2.3 引入依赖

Bus动态刷新

Bus动态刷新全局广播配置实现 启动 EurekaMain7001ConfigcenterMain3344ConfigclientMain3355ConfigclicntMain3366 运维工程师 修改Gitee上配置文件内容&#xff0c;增加版本号发送POST请求curl -X POST "http://localhost:3344/actuator/bus-refresh" —次发送…

【C++进阶之路】第二篇:多态 抽象类 单继承和多继承关系中的虚函数表

&#x1f31f;hello&#xff0c;各位读者大大们你们好呀&#x1f31f; &#x1f36d;&#x1f36d;系列专栏&#xff1a;【C学习与应用】 ✒️✒️本篇内容&#xff1a;多态的概念&#xff0c;多态的构成条件&#xff0c;虚函数重写&#xff0c;C11final和overrid&#xff0c;重…

谈谈我对Edge浏览器分屏功能的使用感受

谈谈我对Edge浏览器分屏功能的使用感受 前言 最近&#xff0c;微软为 Microsoft Edge 浏览器的稳定版本带来了分屏浏览 (Split Screen) 这个新玩意儿&#xff0c;这个功能允许用户在同一个页面以左右视图的形式并排打开两个标签页&#xff0c;类似于软件的分屏。 各位看官如果想…

将经纬度坐标在ArcGIS软件中生成系列矢量数据

目录 环境介绍&#xff1a; 操作内容&#xff1a; 操作步骤&#xff1a; 1、将经纬度坐标值编辑在excel中&#xff0c;注意x、y对应的分别是经度和纬度 2、打开ArcMap软件&#xff0c;加载.xls数据 3、需要选择地理坐标系 4、点矢量数据生成 5、线矢量数据生成 6、面矢量…

2.1 Linux命令行

系列文章目录 第1章 Linux Shell简介 第2章 Shell基础 <本章所在位置> 第3章 Bash Shell基础命令 第4章 Bash Shell命令进阶 第5章 Linux Shell深度理解 第6章 Linux环境变量 第7章 Linux文件权限 第8章 Linux文件系统的管理 第9章 Linux软件安装 第10章 Linux文本编辑器…

Linux多路IO复用:select

1. 多路IO复用 内核监听多个socket文件描述符读写缓冲区属性的变化&#xff0c;若某个文件描述符的读缓冲区有变化&#xff0c;则将该事件告诉应用层。 内核提供多路IO复用的API&#xff1a;select、poll&#xff08;使用较少&#xff09;、epoll。 2. select select原理 用…

设置让Windows每天在指定时间自动关机

其实我们的电脑是可以设置每天在指定的时间点自动关机的&#xff0c;具体操作方法&#xff1a; 1、开打电脑&#xff0c;点击电脑系统左下角windows图标&#xff0c;选择“控制面板”并进入&#xff1b;如图 2、在控制面板界面找到“管理工具”&#xff0c;点击开打&#xff1b…