从零开始的力扣刷题记录-第八十四天

news/2024/11/24 1:16:36/

力扣每日四题

  • 1002. 查找共用字符-简单
  • 997. 找到小镇的法官-简单
  • 343. 整数拆分-中等
  • 1024. 视频拼接-中等
  • 总结

1002. 查找共用字符-简单

题目描述:
给你一个字符串数组 words ,请你找出所有在 words 的每个字符串中都出现的共用字符( 包括重复字符),并以数组形式返回。你可以按 任意顺序 返回答案。

题解:
使用一个数组记录各字符出现的最少次数即可

代码(Go):

func commonChars(words []string) []string {num := [26]int{}for i,_ := range num{num[i] = 100}for _,v := range words{tempnum := [26]int{}for _,b := range v{tempnum[int(b - 'a')]++}for i,v := range tempnum{if v < num[i]{num[i] = v}}}re := []string{}for i,v := range num{temp := vfor temp > 0{re = append(re,string('a' + i))temp--}}return re
}

997. 找到小镇的法官-简单

题目描述:
小镇里有 n 个人,按从 1 到 n 的顺序编号。传言称,这些人中有一个暗地里是小镇法官。
如果小镇法官真的存在,那么:
小镇法官不会信任任何人。
每个人(除了小镇法官)都信任这位小镇法官。
只有一个人同时满足属性 1 和属性 2 。
给你一个数组 trust ,其中 trust[i] = [ai, bi] 表示编号为 ai 的人信任编号为 bi 的人。
如果小镇法官存在并且可以确定他的身份,请返回该法官的编号;否则,返回 -1 。

题解:
先统计所有人被信任的次数,再查看被信任次数为n-1的人是否信任别人。看官方题解才发现这是个图的出度入度问题,只需要统计一下出度入度就可以了

代码(Go):

func findJudge(n int, trust [][]int) int {if n == 1{return 1}num := make([]int,n + 1)for _,v := range trust{num[v[1]]++}for i,v := range num{if v == n - 1{flag := 1for _,x := range trust{if x[0] == i{flag = 0break}}if flag == 1{return i}}}return -1
}

343. 整数拆分-中等

题目描述:
给定一个正整数 n ,将其拆分为 k 个 正整数 的和( k >= 2 ),并使这些整数的乘积最大化。
返回 你可以获得的最大乘积 。

题解:
这个题我记得好像是去年笔试做过的原题,可以用动态规划做,但实际上只要尽可能的拆出3来就可以了,最后如果剩1就与一个3合起来乘4,剩2就乘2即可

代码(Go):

func integerBreak(n int) int {if n <= 3 {return n - 1}quotient := n / 3remainder := n % 3if remainder == 0 {return int(math.Pow(3, float64(quotient)))} else if remainder == 1 {return int(math.Pow(3, float64(quotient - 1))) * 4}return int(math.Pow(3, float64(quotient))) * 2
}

1024. 视频拼接-中等

题目描述:
你将会获得一系列视频片段,这些片段来自于一项持续时长为 time 秒的体育赛事。这些片段可能有所重叠,也可能长度不一。
使用数组 clips 描述所有的视频片段,其中 clips[i] = [starti, endi] 表示:某个视频片段开始于 starti 并于 endi 结束。
甚至可以对这些片段自由地再剪辑:
例如,片段 [0, 7] 可以剪切成 [0, 1] + [1, 3] + [3, 7] 三部分。
我们需要将这些片段进行再剪辑,并将剪辑后的内容拼接成覆盖整个运动过程的片段([0, time])。返回所需片段的最小数目,如果无法完成该任务,则返回 -1 。

题解:
和之前能否跳到终点的题本质上是一样的,可以先通过建立一个数组保存每个start点能到达的最远距离,这个题就完全转换成了能否跳到终点的问题,通过维护一个最远距离,计算小于当前最远距离的最大距离,当i到达当前最远距离时,片段数量加一并更改最远距离,若max>=time说明可以到达

代码(Go):

func videoStitching(clips [][]int, time int) int {maxtime := make([]int,time + 1)for _,v := range clips{if v[0] < time && maxtime[v[0]] < v[1]{maxtime[v[0]] = v[1]}}max := 0temp := 0re := 0for i := 0;i <= max;i++{if maxtime[i] > temp{temp = maxtime[i]}if i == max{re++max = temp}if max >= time{return re}}return -1
}

总结

两道动态规划题都没有用动态规划做,明天继续动态规划


http://www.ppmy.cn/news/825772.html

相关文章

如何打出^符号

打开大写锁定Caps Lock键&#xff0c;然后shift6&#xff0c;就能够打出^符号了

如何在markdown中打出上标、下标和一些特殊符号

转载,记录:https://www.jianshu.com/p/80ac23666a98

MathType中平均值该如何输入

2019独角兽企业重金招聘Python工程师标准>>> 在数学中有很多符号和公式样式&#xff0c;在用MathType数学公式编辑器编辑时经常不知道选择什么样的模板进行输入&#xff0c;比如平均值&#xff0c;那么MathType中平均值是怎么输入的呢&#xff1f; 更多内容可参考&a…

在markdown中打出上标、下标、上、下角标、特殊符号

csdn写文章的时候经常遇到要写公式的时候&#xff0c;又经常使用上下角标&#xff0c;记录一下markdown语法怎么打出上下角标。 markdown是支持HTML语法的&#xff0c;所以这里就是利用html语法在markdown中输入上下角标和特殊符号 上标 n<sup>2</sup>n效果&…

MathType里如何打出损失函数L符号

方法&#xff1a;复制下方指令&#xff0c;粘贴到mathtype里即可。 \mathcal{L}

∑x 算平均数

#include<stdio.h> int main() {int num;int sum 0;int count 0;scanf("%d",&num);while( num ! 0 ){sum num;count;num--;}printf("%f",sum*1.0/count);return 0; }

python如何求每一行的均值_计算每X行数的平均值

根据我对你问题的理解&#xff0c;听起来你有一些文件&#xff0c;你想把每一行的平均值取到第600行&#xff0c;然后重复多次&#xff0c;直到没有更多的数据为止。所以在第600行&#xff0c;你平均0-600行&#xff0c;在1200行你平均600到1200行。在 模除法是一种在每600行命…

从键盘输入10个整数,求其平均值

#include<stdio.h> int main(){ // 从键盘输入10个整数&#xff0c;求其平均值int a[10];float aver0;int sum0;printf("请输入10个整数\n");for (int i0;i<10;i){scanf("%d",&a[i]);sumsuma[i];aversum/10.0;}printf("%f",aver);}…