2020力扣第33周双周赛题解

    • 题目一
    • 示例
    • 解题思路与代码实现
    • 题目二
    • 示例
    • 解题思路与代码实现
    • 题目三
    • 解题思路与代码实现
    • 题目四
    • 示例
    • 解题思路与代码实现
  • 写在最后

题目一

题目一:千位分隔数

给你一个整数 n,请你每隔三位添加点(即 “.” 符号)作为千位分隔符,并将结果以字符串格式返回。

示例

示例 1:

输入:n = 987
输出:“987”

示例 2:

输入:n = 1234
输出:“1.234”

示例 3:

输入:n = 123456789
输出:“123.456.789”

解题思路与代码实现

本题直接模拟即可,如果使用栈来实现最好从最后面开始,因为我们拿到的数字不一定是3的倍数。

class Solution {public String thousandSeparator(int n) {String m = String.valueOf(n);int len = m.length();StringBuilder sb = new StringBuilder();int cnt = 0;for (int i = len - 1; i >= 0; i--) {sb.append(m.charAt(i));cnt++;if (cnt % 3 == 0 && i != 0) {sb.append(".");}}return sb.reverse().toString();}
}

题目二

题目二:可以到达所有点的最少点数目

给你一个 有向无环图 , n 个节点编号为 0 到 n-1 ,以及一个边数组 edges ,其中 edges[i] = [fromi, toi] 表示一条从点 fromi 到点 toi 的有向边。

找到最小的点集使得从这些点出发能到达图中所有点。题目保证解存在且唯一。

你可以以任意顺序返回这些节点编号。

示例


解题思路与代码实现

本题的题意即是获取当前入度为0的所有点的并集即可。

class Solution {public List<Integer> findSmallestSetOfVertices(int n, List<List<Integer>> edges) {// 统计入度为0的点即可List<Integer> ans = new ArrayList<Integer>();int[] inDegree = new int[n];for (List<Integer> edge : edges) {inDegree[edge.get(1)]++;}for (int i = 0; i < n; i++) {if (inDegree[i] == 0) {ans.add(i);}}return ans;}}

题目三

题目三:得到目标数组的最少函数调用次数

给你一个与 nums 大小相同且初始值全为 0 的数组 arr ,请你调用以上函数得到整数数组 nums 。

请你返回将 arr 变成 nums 的最少函数调用次数。

答案保证在 32 位有符号整数以内。

解题思路与代码实现

class Solution {int oddCnt = 0;int evenCnt = 0;public int minOperations(int[] nums) {int ans = 0;for (int num : nums) {numCnt(num);}ans = oddCnt + evenCnt;return ans;}private void numCnt(int n){int cnt = 0;while (n > 0) {if (n % 2 == 1) {oddCnt++;n--;}else {cnt++;n /= 2;}}evenCnt = Math.max(evenCnt,cnt);}
}

题目四

题目四:二维网格图中探测环

给你一个二维字符网格数组 grid ,大小为 m x n ,你需要检查 grid 中是否存在 相同值 形成的环。

一个环是一条开始和结束于同一个格子的长度 大于等于 4 的路径。对于一个给定的格子,你可以移动到它上、下、左、右四个方向相邻的格子之一,可以移动的前提是这两个格子有 相同的值 。

同时,你也不能回到上一次移动时所在的格子。比方说,环 (1, 1) -> (1, 2) -> (1, 1) 是不合法的,因为从 (1, 2) 移动到 (1, 1) 回到了上一次移动时的格子。

如果 grid 中有相同值形成的环,请你返回 true ,否则返回 false 。

示例


解题思路与代码实现

本题dfs半天做不出来,参考了大佬@xiaoxi666的题解,下面附上并查集的题解

class Solution {public boolean containsCycle(char[][] grid) {int h = grid.length;int w = grid[0].length;DSU dsu = new DSU(w * h);for (int i = 0; i < h; ++i) {for (int j = 0; j < w; ++j) {char cur = grid[i][j];// 向右搜索if (j + 1 < w && cur == grid[i][j + 1]) {if (dsu.union(i * w + j, i * w + j + 1)) {return true;}}// 向下搜索if (i + 1 < h && cur == grid[i + 1][j]) {if (dsu.union(i * w + j, (i + 1) * w + j)) {return true;}}}}return false;}class DSU {int[] parent;public DSU(int N) {parent = new int[N];for (int i = 0; i < N; ++i) {parent[i] = i;}}public int find(int x) {if (parent[x] != x) {parent[x] = find(parent[x]);}return parent[x];}/*** 若合并前,x和y的parent相同,则表示形成环,返回true。** @param x* @param y* @return*/public boolean union(int x, int y) {int parentX = find(x);int parentY = find(y);if (parentX == parentY) {return true;}if (parentX < parentY) {parent[parentY] = parentX;} else {parent[parentX] = parentY;}return false;}}
}

写在最后

一切都很不确定,但坚持学习是必须要做的事,加油!

20200827:2020力扣第33周双周赛题解相关推荐

  1. 20200727:力扣第31周双周赛题解

    力扣第31周双周赛题解 题目一:在区间范围内统计奇数数目 给你两个非负整数low和high,请你返回low和high之间(包含二者)奇数的数目 0 <= low <= high <= ...

  2. 20211201:力扣第268周双周赛(上)

    力扣第268周双周赛(上) 题目 思路与算法 代码实现 写在最后 题目 两栋颜色不同且距离最远的房子 给植物浇水 思路与算法 双指针遍历即可,维护那个索引最大差值即可. 模拟题,正常情况需要每次走一步 ...

  3. 20210119:力扣第42周双周赛(下)

    力扣第42周双周赛(下) 题目 思路与算法 代码实现 写在最后 题目 修改后的最大二进制字符串 得到连续 K 个 1 的最少相邻交换次数 思路与算法 修改后的最大二进制字符串 这道题的思路很简单,交换 ...

  4. 20210101:力扣第42周双周赛(上)

    力扣第42周双周赛(上) 题目 思路与算法 代码实现 写在最后 题目 无法吃午餐的学生数量 平均等待时间 思路与算法 无法吃午餐的学生数量 本题直接暴力模拟也没问题,但是这应该不是题目的本意,我们可以 ...

  5. 20210530:力扣第53场双周赛题解

    力扣第53场双周赛题解 题目 思路与算法 代码实现 写在最后 题目 长度为三且各字符不同的子字符串 数组中最大数对和的最小值 矩阵中最大的三个菱形和 思路与算法 长度为三且各字符不同的子字符串:遍历查 ...

  6. 20220219:力扣第72场双周赛题解

    力扣第72场双周赛 题目 思路与算法 代码实现 写在最后 题目 统计数组中相等且可以被整除的数对 找到和为给定整数的三个连续整数 拆分成最多数目的偶整数之和 统计数组中好三元组数目 思路与算法 前三题 ...

  7. 20201023:力扣第37场双周赛(上)

    力扣第37场双周赛(上) 题目 思路与算法 代码实现 写在最后 题目 删除某些元素后的数组均值 网络信号最好的坐标 思路与算法 第二题直接暴力就可以了,计算每个点的所有偏移量存入list,即以(0,0 ...

  8. 20200922:leetcode35周双周赛题解记录(下)

    leetcode35周双周赛题解记录(下) 题目 思路与算法 代码实现 复杂度分析 题目 3.1590. 使数组和能被 P 整除 4.1591. 奇怪的打印机 II 思路与算法 第三题前缀和衍生题目, ...

  9. 20200920:leetcode35周双周赛题解(上)

    leetcode35周双周赛题解(上) 题目 思路与算法 代码实现 写在最后 题目 1.5503. 所有奇数长度子数组的和 2.5505. 所有排列中的最大和 思路与算法 第一题暴力就行了,看了很多大 ...

最新文章

  1. python批量jpg转png(顺序排列1.2.3……)、修改文件夹尺寸
  2. 大一计算机期末考试高数试卷,高等数学大一期末试卷(A)及答案
  3. VMware介绍与网络的三种模式
  4. 2020-11-4(安卓开发)
  5. Knative 基本功能深入剖析:Knative Serving 的流量灰度和版本管理
  6. python点操作符语法_最基础的python语法
  7. 【Java3】封装,对象数组,构造器,this/super/继承,抽象
  8. 编译linux内核分区,Ubuntu编译内核及grub的一些笔记
  9. JAVA安装报1620错误_java安装错误1620
  10. Spring事务管理(注解式声明事务管理)备忘
  11. 中数据库url怎么写_WIN10下怎么找到MYSQL数据库中存储数据的位置
  12. springboot使用Log4j动态改变日志级别
  13. 批量提取html文字,批量提取网页内容(全自动)
  14. jq时间轴水平介绍js特效
  15. 微信HTML5页面设计建议
  16. 台式计算机强制关机,台式电脑强制关机按什么键
  17. HTML5学习系列之表单与文件
  18. HTML5开发工具有哪些?
  19. Android 8.1 应用安装过程总结
  20. 复合赋值运算符“+=、-=、*=、/=、%=”详解

热门文章

  1. 如何避免程序员的大脑超载?
  2. 权威解读 GitHub、Apache 疑云:主流开源软件究竟是否会被闭源?| CSDN 独家
  3. 移动开发出路在哪里?是时候用物联网了!| 技术头条
  4. iSPRINT:Google 最高能的创新加速课程,绝不允许产品走弯路!
  5. 学 Python 没找对路到底有多惨?| 码书
  6. 芯片之战!亚马逊、Google、苹果群起“围攻”英特尔
  7. 腾讯生死年 | 畅言
  8. 一文了解 AI 改变生活的 14 种姿势
  9. 如何向小白讲述软件架构发展历程?
  10. 史上最大漏洞危机:影响所有 iPhone、Android、PC 设备,修复困难重重