T1: 温度转换

思路:模拟

public double[] convertTemperature(double celsius) {
return new double[]{celsius + 273.15, celsius * 1.80 + 32.00};
}

T2: 最小公倍数为 K 的子数组数目

思路:暴力枚举

  1. 关键在于如何高效求得两个数字的最小公倍数
  2. 最小公倍数 = a × b ÷ 最大公约数
  3. 使用辗转相除法求最大公约数
// 辗转相除法求最大公约数
public int gcd(int a, int b) {
if (a == 0) {
return b;
} return gcd(b % a, a);
} public int lcm(int a, int b) {
return a * b / (gcd(a, b));
} public int subarrayLCM(int[] nums, int k) {
int res = 0; // 暴力枚举所有子数组
for (int i = 0; i < nums.length; i++) {
if (nums[i] > k) {
continue;
} int temp = 1;
for (int j = i; j < nums.length; j++) {
temp = lcm(temp, nums[j]); // 剪枝条件
if (k % temp != 0) {
break;
} if (temp == k) {
res += 1;
}
}
} return res;
}

T3: 逐层排序二叉树所需的最少操作数目

本题解答参考学习 灵茶山艾府 大佬的题解。

思路:宽度优先搜索 + 置换环

本题抽象出来就是使得每一层数组元素有序的最小交换次数,该问题的做法是置换环。

如何寻找置换环:将这个数字当成下标去访问数组中的元素,不断循环直到回到这个数本身。对于每个置换环,需要的交换次数是 size - 1

public int minimumOperations(TreeNode root) {
//BFS
int res = 0;
Queue<TreeNode> queue = new ArrayDeque<>();
queue.offer(root); while (!queue.isEmpty()) {
int size = queue.size(); int[] arr = new int[size];
for (int i = 0; i < size; i++) {
TreeNode node = queue.poll();
arr[i] = node.val; if (node.left != null) {
queue.add(node.left);
} if (node.right != null) {
queue.add(node.right);
}
} res += exchangeTimes(arr);
} return res;
} public int exchangeTimes(int[] arr) {
int count = 0; // key: arr 元素值
// value: 对应元素应该放置的下标
Map<Integer, Integer> map = new HashMap<>();
int[] copy = Arrays.copyOf(arr, arr.length);
Arrays.sort(copy); for (int i = 0; i < copy.length; i++) {
map.put(copy[i], i);
} // 标记数组,表示下标为 i 的元素是否已被访问过
boolean[] flags = new boolean[arr.length]; for (int i = 0; i < arr.length; i++) {
if (!flags[i]) {
int j = i;
while (!flags[j]) {
flags[j] = true;
j = map.get(arr[j]);
} count += 1;
}
} return arr.length - count;
}

T4: 不重叠回文子字符串的最大数目

思路:中心拓展 + 动态规划

  • 中心拓展方法枚举回文子串的中心位置

  • 若子串 s[left, right] 是回文串,则 \(dp[right + 1] = Max(dp[right + 1], dp[left] + 1)\)

中心拓展枚举回文中心方法介绍

长度为 n 的字符串会生成 2n - 1 组回文中心 \([left_i, right_i]\),其中 \(left_i = i / 2, right_i = i / 2 + i \% 2\)

所以,在 0 ~ 2n-2 范围内遍历,即可得到所有可能的回文中心

public int maxPalindromes(String s, int k) {
char[] arr = s.toCharArray();
int n = arr.length; int[] dp = new int[n + 1]; // 中心拓展枚举回文子串
for (int i = 0; i < 2 * n - 1; i++) {
int left = i / 2;
int right = i / 2 + i % 2; dp[left + 1] = Math.max(dp[left + 1], dp[left]);
while (left >= 0 && right < n && arr[left] == arr[right]) {
if (right - left + 1 >= k) {
dp[right + 1] = Math.max(dp[right + 1], dp[left] + 1);
} left -= 1;
right += 1;
}
} return dp[n];

LeeCode 319周赛复盘的更多相关文章

  1. leecode系列--Two Sum

    学习这件事在任何时间都不能停下.准备坚持刷leecode来提高自己,也会把自己的解答过程记录下来,希望能进步. Two Sum Given an array of integers, return i ...

  2. SGU 319. Kalevich Strikes Back (线段树)

    319. Kalevich Strikes Back Time limit per test: 0.5 second(s)Memory limit: 65536 kilobytes input: st ...

  3. 周赛-KIDx's Pagination 分类: 比赛 2015-08-02 08:23 7人阅读 评论(0) 收藏

    KIDx's Pagination Time Limit: 2000/1000MS (Java/Others) Memory Limit: 128000/64000KB (Java/Others) S ...

  4. Win8制作和使用恢复盘

    制作和使用恢复盘要制作恢复盘,请执行以下操作:注:确保计算机连接到交流电源.1. 将指针移至屏幕的右上角或右下角以显示超级按钮,然后单击搜索.2. 根据操作系统的不同,执行以下某项操作:• 在 Win ...

  5. insertion Sort List (链表的插入排序) leecode java

    逻辑简单,代码难写,基础不劳,leecode写注释不能出现中文,太麻烦,我写了大量注释,链表问题最重要的就是你那个指针式干啥的 提交地址https://oj.leetcode.com/problems ...

  6. 后续遍历 java leecode

    以前觉得后续遍历最难写,今天看了篇博客http://blog.csdn.net/sgbfblog/article/details/7773103,其实却是我们仔细比较后续遍历和先序遍历,其实后续遍历就 ...

  7. 非递归实现先序遍历 java leecode 提交

    写完才知道自己学习都是似是而非啊,大家可以也在leecode上提交代码,纯手写,离开eclipse第一种方式:数据结构书上的,使用栈大概思路.1.不断将根节点的左孩子的左孩子直到为空,在这个过程入栈. ...

  8. leecode 归并排序 链表(java)

    写了好久,终于写成了.第一次zai leecode错题,题目质量很高,适合面试,与 1.归并排序是稳定的,在java中 Arrays.sort(a);中对于对象的排序就是归并排序.对于原子类型数据使用 ...

  9. bug修复复盘

    mybatis与数据库交互时,报了莫名其妙的错,日志中显示的Stack Trace中报错的代码行数与IDE中还一致,逐重启tomcat,异常消失. 故障复盘:没有重启tomcat,使用copy命令直接 ...

  10. Swing开发界面时的一个bug复盘

    问题:QA突然发个截图说一个Dialog上展示的东西变形了 分析:不理解,什么也没做,怎么会变形,刚刚我用的时候还正常.看看代码,的确什么也没更改:在本地测一下,也没有问题:baidu,bing,st ...

随机推荐

  1. angular项目语言切换功能

    1.NzI18nService服务 参考:https://ng.ant.design/docs/i18n/zh 2.ngx-translate插件 1)安装依赖 npm install @ngx-tr ...

  2. 本地mysql端口3306 一直干不掉这样解决

    第一步:先whereis   mysql(查找到MySQL的一些本地文件) 主要删除这两个   再干掉端口3306  即可

  3. php上传文件时出现 caution: request is not finished yet

    其中的一个原因:是wamp64下的tmp文件夹中的临时文件太多,把这个文件夹的临时文件清理后就可以了.

  4. Sql Server函数全解

    --系统函数 create database sample_db; use sample_db; create table student ( i_sid int primary key identi ...

  5. MapReduce实践

    1. 词频统计任务要求 首先,在Linux系统本地创建两个文件,即文件wordfile1.txt和wordfile2.txt.在实际应用中,这两个文件可能会非常大,会被分布存储到多个节点上.但是,为了 ...

  6. windows系统错误代码

    0  操作成功完成.  1  功能错误.  2  系统找不到指定的文件.  3  系统找不到指定的路径.  4  系统无法打开文件.  5  拒绝访问.  6  句柄无效.  7  存储控制块被损坏. ...

  7. EL_获取域中存储的值_ List 集合&Map集合值和EL _ empty 运算符&隐式对象 pageContext

    3.获取对線. List 集合. Map 集合的值 1.对線:${域名称,键名.属性名}本质上会去调用对線的 getter 方法 2. List 集合:${域名称.键名[索引]} List list ...

  8. Sql Server代理作业、定时任务

    需求: 本次需求为每15分钟获取一次思路为,创建结果表,代理作业定时更新数据并存入结果表,后端只需要调用结果表数据数据,如果超期不同的天数则给出不同的提示信息,因为没有触发点,所以用到了本文内容. 右 ...

  9. 韦东山005_ARM裸机1期加强版

    005_ARM裸机1期加强版(又叫新1期,151节,23节免费,已完结)\新1期视频(151节,23节免费) 第006课开发板熟悉与体验(6节,免费) 第001节_开发板部件介绍与串口连接(免费) 如 ...

  10. mybatis-plus获取对象的某一个属性list--->List<String>

    获取List<String> name new QueryWrapper<对象>().eq("**","**")).stream().m ...