Leetcode刷题 2021.01.22
Leetcode刷题 2021.01.22
- Leetcode1042 不邻接植花
- Leetcode1010 总持续时间可被 60 整除的歌曲
- Leetcode1091 二进制矩阵中的最短路径
Leetcode1042 不邻接植花
有 n 个花园,按从 1 到 n 标记。另有数组 paths ,其中 paths[i] = [xi, yi] 描述了花园 xi 到花园 yi 的双向路径。在每个花园中,你打算种下四种花之一。
另外,所有花园 最多 有 3 条路径可以进入或离开.
你需要为每个花园选择一种花,使得通过路径相连的任何两个花园中的花的种类互不相同。
以数组形式返回 任一 可行的方案作为答案 answer,其中 answer[i] 为在第 (i+1) 个花园中种植的花的种类。花的种类用 1、2、3、4 表示。保证存在答案。
学校27号以后就要封校了,今天就急着回家了。不知道上海疫情会怎么发展,希望春节档还能有时间看电影吧。家里没有台式机,写代码都不习惯了,从爸妈那里要了点经费,希望能赶紧赚钱还他们吧。
看这道题就想到四色定理,结果越想越复杂,其实题目已经给定了每个花园 最多 有 3 条路径可以进入或离开。大大简化了题目,又想到《嫌疑人X的献身》里,石神在监狱里证明四色定理了。题目还是比较容易的,就是遍历每一个数字,看与它相连的数字中是否已经用了颜色了,选取一个没有用过的颜色就OK了。
class Solution {public int[] gardenNoAdj(int n, int[][] paths) {//构建邻接表List<List<Integer>> edges = new ArrayList<>();for(int i = 0; i < n; i++){edges.add(new ArrayList<>());} //往邻接表填数,双向表,双方都要填for(int[] p : paths){edges.get(p[0] - 1).add(p[1] - 1);edges.get(p[1] - 1).add(p[0] - 1);}int[] res = new int[n];//遍历每一个数字,看看有哪个数字没用,用那个数字就行for(int i = 0; i < n; i++){int[] color = new int[4];for(int neighbour : edges.get(i)){if (res[neighbour] != 0){color[res[neighbour] - 1] = 1;}}for(int j = 1; j <= 4; j++){if (color[j - 1] == 0){res[i] = j;break;}}}return res;}
}
Leetcode1010 总持续时间可被 60 整除的歌曲
在歌曲列表中,第 i 首歌曲的持续时间为 time[i] 秒。
返回其总持续时间(以秒为单位)可被 60 整除的歌曲对的数量。形式上,我们希望索引的数字 i 和 j 满足 i < j 且有 (time[i] + time[j]) % 60 == 0。
这种拿到手就有O(N^2)思路的中等题肯定要优化到O(N)的。思路也是比较清晰的,既然sum%60 == 0,那肯定是在遍历的过程中记录了。记录的元素即钙元素域60的余数,然后分是否为0,不同情况讨论就好了,代码也比较简单。
话说一开始用map,结果只击败5%,leetCode里能用数组尽量用数组吧。
class Solution {public int numPairsDivisibleBy60(int[] time) {//记忆数组int[] map = new int[60];int res = 0;for(int ele : time){//记录该元素与60的余数int temp = ele % 60;//查看前面是否有60-temp的个数,分两种情况讨论if (temp != 0){res += map[60 - temp];}else {res += map[0];}map[temp]++;}return res;}
}
Leetcode1091 二进制矩阵中的最短路径
在一个 N × N 的方形网格中,每个单元格有两种状态:空(0)或者阻塞(1)。
一条从左上角到右下角、长度为 k 的畅通路径,由满足下述条件的单元格 C_1, C_2, …, C_k 组成:
相邻单元格 C_i 和 C_{i+1} 在八个方向之一上连通(此时,C_i 和 C_{i+1} 不同且共享边或角)
C_1 位于 (0, 0)(即,值为 grid[0][0])
C_k 位于 (N-1, N-1)(即,值为 grid[N-1][N-1])
如果 C_i 位于 (r, c),则 grid[r][c] 为空(即,grid[r][c] == 0)
返回这条从左上角到右下角的最短畅通路径的长度。如果不存在这样的路径,返回 -1 。
这种图论找最短的距离,就是BFS啦。基本就是最基础的BFS模板题了,没什么难的,就是理解并记忆一些常用套路而已,
class Solution {int[][] directions = new int[][]{{-1, 0}, {1, 0}, {0, -1}, {0, 1}, {-1, -1}, {-1, 1}, {1, -1}, {1, 1}};public int shortestPathBinaryMatrix(int[][] grid) {int m = grid.length, n = grid[0].length;Queue<int[]> queue = new LinkedList<>();if (grid[0][0] == 1) return -1;queue.offer(new int[]{0, 0});int level = 1;boolean flag = false;while (!queue.isEmpty() && !flag){int k = queue.size();for(int i = 0; i < k; i++){int[] temp = queue.poll();int x = temp[0], y = temp[1];if (x == m - 1 && y == n - 1) return level;for(int j = 0; j < 8; j++){int dx = x + directions[j][0], dy = y + directions[j][1];if (dx < 0 || dx >= m || dy < 0 || dy >= n || grid[dx][dy] == 1) continue;queue.offer(new int[]{dx, dy});grid[dx][dy] = 1;}}level++;}return -1;}
}
Leetcode刷题 2021.01.22相关推荐
- Leetcode刷题 2021.02.26
Leetcode刷题 2021.02.26 Leetcode1178 猜字谜 Leetcode869 重新排序得到 2 的幂 Leetcode1676 二叉树的最近公共祖先 IV Leetcode11 ...
- 小何同学的leetcode刷题笔记 基础篇(01)整数反转
小何同学的leetcode刷题笔记 基础篇(01)整数反转[07] *** [01]数学取余法*** 对数字进行数位操作时,常见的方法便是用取余的方法提取出各位数字,再进行操作 操作(1):对10取余 ...
- LeetCode 刷题之旅(2020.05.22)——105. 从前序与中序遍历序列构造二叉树(中)
LeetCode 刷题之旅(2020.05.22)--105. 从前序与中序遍历序列构造二叉树(中) 题目: 根据一棵树的前序遍历与中序遍历构造二叉树. 注意: 你可以假设树中没有重复的元素. 例如, ...
- leetcode刷题记录总结-7.二叉树
文章目录 零.二叉树理论 二叉树的种类 满二叉树 完全二叉树 二叉搜索树 平衡二叉搜索树 二叉树的存储方式 二叉树的遍历方式 二叉树的定义 总结 一.二叉树的遍历 [144. 二叉树的前序遍历 ](h ...
- C#LeetCode刷题-程序员面试金典
本文由 比特飞 原创发布,欢迎大家踊跃转载. 转载请注明本文地址:C#LeetCode刷题-程序员面试金典 | .Net中文网. C#LEETCODE刷题概述 概述 所有LeetCode程序员面试金典 ...
- leetcode刷题目录总结
题目 题目 技巧 相似的题目 其他 1. 无序数组中找出目标为target的两个数 先定义下一个数,然后找两位的数是否存在 高频, 大厂刷题班, 第27节 2.逆序链表两数相加 链表.各位加法 高频, ...
- 一个算法笨蛋的12月leetCode刷题日记
类似文章 一个算法笨蛋的2021年11月leetCode刷题日记 一个算法笨蛋的2021年12月leetCode刷题日记 一个算法笨蛋的2022年1月leetCode刷题日记 一个算法笨蛋的2022年 ...
- LeetCode 刷题之路(python版)
摘自:https://blog.csdn.net/qq_32384313/article/details/90745354 LeetCode 刷题之路(python版) 小坏wz 2019-06-02 ...
- Leetcode刷题
刷题 leetcode 1.两数之和 #哈希表 class Solution:def twoSum(self, nums: List[int], target: int) -> List[int ...
最新文章
- 【camera】基于深度学习的车牌检测与识别系统实现(课程设计)
- C#中抽象类和接口的区别
- R绘制QQ图并解读QQ图
- 关于MYSQL 字符转义问题总结
- LeetCode-剑指 Offer 10- I. 斐波那契数列
- excel 平滑滚动_Excel怎么学 | 图表实战,销售数据的不同表达方式
- java观察者设计模式_Java中的观察者设计模式
- LeetCode(#118)————杨辉三角形
- Airflow 中文文档:管理连接
- TMD 之后,再无 BAT? | 畅言
- Python基础——import(导入模块)
- 猿创征文|[CM311-1A Armbian]-烧录制作 Armbian 系统盘以及写入 CM311-1A 机顶盒的 EMMC 刷成服务器
- sugarnms如何快速实现网管软件定制开发?
- JavaScript面试题111-120
- 带外通道技术(OOB)总结
- 修复WIN7系统开机黑屏,只剩下鼠标能动的问题。
- 刚写完排序算法,就被开除了…
- Android9--android 10.0 去掉未知来源弹窗 默认授予安装未知来源权限
- python在工程中的应用_将Flash应用于Python项目(转)
- 【用单链表管理商品库存表】