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相关推荐

  1. Leetcode刷题 2021.02.26

    Leetcode刷题 2021.02.26 Leetcode1178 猜字谜 Leetcode869 重新排序得到 2 的幂 Leetcode1676 二叉树的最近公共祖先 IV Leetcode11 ...

  2. 小何同学的leetcode刷题笔记 基础篇(01)整数反转

    小何同学的leetcode刷题笔记 基础篇(01)整数反转[07] *** [01]数学取余法*** 对数字进行数位操作时,常见的方法便是用取余的方法提取出各位数字,再进行操作 操作(1):对10取余 ...

  3. LeetCode 刷题之旅(2020.05.22)——105. 从前序与中序遍历序列构造二叉树(中)

    LeetCode 刷题之旅(2020.05.22)--105. 从前序与中序遍历序列构造二叉树(中) 题目: 根据一棵树的前序遍历与中序遍历构造二叉树. 注意: 你可以假设树中没有重复的元素. 例如, ...

  4. leetcode刷题记录总结-7.二叉树

    文章目录 零.二叉树理论 二叉树的种类 满二叉树 完全二叉树 二叉搜索树 平衡二叉搜索树 二叉树的存储方式 二叉树的遍历方式 二叉树的定义 总结 一.二叉树的遍历 [144. 二叉树的前序遍历 ](h ...

  5. C#LeetCode刷题-程序员面试金典

    本文由 比特飞 原创发布,欢迎大家踊跃转载. 转载请注明本文地址:C#LeetCode刷题-程序员面试金典 | .Net中文网. C#LEETCODE刷题概述 概述 所有LeetCode程序员面试金典 ...

  6. leetcode刷题目录总结

    题目 题目 技巧 相似的题目 其他 1. 无序数组中找出目标为target的两个数 先定义下一个数,然后找两位的数是否存在 高频, 大厂刷题班, 第27节 2.逆序链表两数相加 链表.各位加法 高频, ...

  7. 一个算法笨蛋的12月leetCode刷题日记

    类似文章 一个算法笨蛋的2021年11月leetCode刷题日记 一个算法笨蛋的2021年12月leetCode刷题日记 一个算法笨蛋的2022年1月leetCode刷题日记 一个算法笨蛋的2022年 ...

  8. LeetCode 刷题之路(python版)

    摘自:https://blog.csdn.net/qq_32384313/article/details/90745354 LeetCode 刷题之路(python版) 小坏wz 2019-06-02 ...

  9. Leetcode刷题

    刷题 leetcode 1.两数之和 #哈希表 class Solution:def twoSum(self, nums: List[int], target: int) -> List[int ...

最新文章

  1. 【camera】基于深度学习的车牌检测与识别系统实现(课程设计)
  2. C#中抽象类和接口的区别
  3. R绘制QQ图并解读QQ图
  4. 关于MYSQL 字符转义问题总结
  5. LeetCode-剑指 Offer 10- I. 斐波那契数列
  6. excel 平滑滚动_Excel怎么学 | 图表实战,销售数据的不同表达方式
  7. java观察者设计模式_Java中的观察者设计模式
  8. LeetCode(#118)————杨辉三角形
  9. Airflow 中文文档:管理连接
  10. TMD 之后,再无 BAT? | 畅言
  11. Python基础——import(导入模块)
  12. 猿创征文|[CM311-1A Armbian]-烧录制作 Armbian 系统盘以及写入 CM311-1A 机顶盒的 EMMC 刷成服务器
  13. sugarnms如何快速实现网管软件定制开发?
  14. JavaScript面试题111-120
  15. 带外通道技术(OOB)总结
  16. 修复WIN7系统开机黑屏,只剩下鼠标能动的问题。
  17. 刚写完排序算法,就被开除了…
  18. Android9--android 10.0 去掉未知来源弹窗 默认授予安装未知来源权限
  19. python在工程中的应用_将Flash应用于Python项目(转)
  20. 【用单链表管理商品库存表】

热门文章

  1. 2022单片机筑基教程
  2. Maven Archetype 开发
  3. 当遗传学遇上Excel格式化,科学家们也只能认输
  4. android switch 空间,android Android UI(Switch)详解
  5. 面试复习-计算机基础
  6. python爬虫——爬取简书文章
  7. 美国国防部机密文件销毁算法
  8. QT以文本流形式读写文件操作
  9. 【博客635】tcpdump原理与网卡混杂模式
  10. 超级高铁创企HTT晒最新测试轨道图 计划今年4月份开始测试