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

刷题记录˃ʍ˂

一、1033. 移动石子直到连续b7e056b42ca24bfca73a1b2141a25ea0.png

 62860ae100a64ae6828c8e3eaa835154.png

 思路

这道题是一道数学题,它一共分为三种可能

第一种可能为三个石子本来就是连续的时候

第二种可能为最少步数为1的时候,相邻石子不能大于一格

第三种可能为最少步数为2的时候,这时相邻石子大于一格

那么第二种和第三种的最多步数都是   最远的石子 - 最近的石子 - 2

因为输入的数据是乱序的,所以还要先将他们排序了来

代码实现

int dis[3];void sort()
{int i , j , s , t;for(i = 0 ;i < 3 ; i++){s = i;for(j = i + 1 ; j < 3 ; j++)if(dis[s] > dis[j])s = j;if(s != i){t = dis[i];dis[i] = dis[s];dis[s] = t;}}
}int* numMovesStones(int a, int b, int c, int* returnSize){int *x=(int*)malloc(sizeof(int)*2);dis[0] = a;dis[1] = b;dis[2] = c;sort();a = dis[0];b = dis[1];c = dis[2];if(b - a == 1 && c - b == 1){x[0] = 0;x[1] = 0;}else if(b - a <= 2){x[0] = 1;x[1] = c - a - 2;}else if(c - b <= 2){x[0] = 1;x[1] = c - a - 2;}else{x[0] = 2;x[1] = c - a - 2;}*returnSize = 2;return x;
}

二、1376. 通知所有员工所需的时间

 0066dd1149544623996a4cb9366d7ad2.png

cc1c8d06e9984643b217f06b9efcc1c5.png

思路

这个题可以联想到树的结构,我们可以从最底层的员工开始向不断的找他的上级,再找的过程中,把通知的时间都加上,然后与max(最长的时间)相比,将较大的时间赋给max,然后再去找下一个底层员工,那么最后的max就是要通知所有员工的话要用的时间

做这个题的时候,力扣的这个自动判断数组越界就很烦,但实际上,我这个也确实没越界,所以这时候就要设一个新的数组来代替infomTime

代码实现

int numOfMinutes(int n, int headID, int* manager, int managerSize, int* informTime, int informTimeSize)
{int ans[100001];for(int i=0;i<n;i++){ans[i]=informTime[i];}int i,max=0,a,t;for(i=0;i<n;i++){if(ans[i]==0){a=manager[i];if(a==-1)t=ans[headID];else {t=ans[a];while(a!=-1){a=manager[a];if (a == -1)continue;t+=ans[a];}}if(max<t)max=t;}}return max;
}

三、有效的括号

fd33c316d23f4381a49e155208f66d10.png 

64ce824a2e8c408dafcd8323b72f8f61.png 

 思路

关于栈的最基础的问题,只要实现了入栈和出栈就行了,当我们遇见左括号的的时候就将它入栈,当我们遇见右括号的时候且符合右括号的时候,就将它出栈

要注意一点的是,当把字符串中的括号全都遍历完时,如果栈里面还有括号,那么也是不正确的

再次吐槽一点,力扣的这个编译器跟真的好伤人心

代码实现

typedef struct
{char date[10001];int top;
}zlink;void enzlink(zlink *p,char x)
{p->top++;p->date[p->top] = x;
}void dezlink(zlink *p)
{p->top--;
}bool isValid(char* s) {zlink p;p.top = 0;p.date[0] = '0';for (int i = 0; i < strlen(s); i++){if (s[i] == '(' || s[i] == '{' || s[i] == '[')enzlink(&p, s[i]);else{if (p.date[p.top] == '(' && s[i] == ')')dezlink(&p);else if (p.date[p.top] == '{' && s[i] == '}')dezlink(&p);else if (p.date[p.top] == '[' && s[i] == ']')dezlink(&p);else return false;}}if (p.top != 0)return false;return true;
}

四、387. 字符串中的第一个唯一字符

779607df65a048e7adec3ec4c06c6797.png

 思路

首先这个题,可以用哈希

我们可以设置一个记录次数的数组,当一个字母出现过,那么次数至少为1,用字母的位置在新数组中显示,后面遍历数组的时候,遇到第一个次数为1 的,直接返回它的位置;

代码实现

int firstUniqChar(char * s){int num[30]={0};for(int i=0;i<strlen(s);i++){num[s[i]-'a']++;}for(int i=0;i<strlen(s);i++){if(num[s[i]-'a']==1)return i;}return -1;
}

 

 

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

相关文章:

  • Word2vec原理+实战学习笔记(二)
  • 什么是Java的多线程?
  • “use strict“是什么? 使用它有什么优缺点?
  • 【C++】C++11常用特性总结
  • 泛型——List 优于数组
  • JavaScript中对象的定义、引用和复制
  • JavaScript通过函数异常处理来输入圆的半径,输出圆的面积的代码
  • Ubuntu 安装 Mysql
  • 【五一创作】【Midjourney】Midjourney 连续性人物创作 ② ( 获取大图和 Seed 随机种子 | 通过 seed 随机种子生成类似图像 )
  • 分布式事务 --- Seata事务模式、高可用
  • SQL(基础)
  • 「OceanBase 4.1 体验」OceanBase 4.1社区版的部署及使用体验
  • 计算机操作系统实验:银行家算法模拟
  • 机器学习:多项式拟合分析中国温度变化与温室气体排放量的时序数据
  • 一个 24 通道 100Msps 逻辑分析仪
  • 使用Process Explorer和Dependency Walker排查C++程序中dll库动态加载失败问题
  • 网工Python:如何使用Netmiko的SCP函数进行文件传输?
  • 题目 3166: 蓝桥杯2023年第十四届省赛真题-阶乘的和--不能完全通过,最好情况通过67.
  • ChatGPT- OpenAI 的 模型(Model) 介绍
  • X 态及基于 VCS 的 X-Propagation 检测
  • 数据库之事务隔离级别详解
  • 守护进程、僵尸进程、孤儿进程
  • 软件设计师笔记
  • 4_用dockerfile制作镜像
  • 肝一肝设计模式【四】-- 建造者模式
  • 从设计到产品
  • 《疯狂Python讲义》值传递的细节
  • 【7. ROS 中的 IMU 惯性测量单元消息包】
  • pcie m.2固态硬盘装机后无法识别到启动盘
  • Java Web应用开发 ——第四章:JavaBean技术测验