C_5169. 日期之间隔几天

题目描述

请你编写一个程序来计算两个日期之间隔了多少天。日期以字符串形式给出,格式为 YYYY-MM-DD,如示例所示。

方法一:调库

使用库自带函数,无需考虑的特殊点。

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
class Solution {public  int daysBetweenDates(String date1, String date2) {SimpleDateFormat sdFormat = new SimpleDateFormat("yyyy-MM-dd");Date parse1 = null;Date parse2 = null;try {parse1 = sdFormat.parse(date1);parse2 = sdFormat.parse(date2);} catch (ParseException e) {e.printStackTrace();}long time = parse1.getTime();long time2 = parse2.getTime();long diff= time2 - time;return Math.abs((int) (diff / 1000 * 24 * 60 * 60));}
}

方法二:自定义逻辑(2 ms)

public int daysBetweenDates1(String date1, String date2) {int diff = 0;String[] strs1 = date1.split("-");String[] strs2 = date2.split("-");int y1 = Integer.parseInt(strs1[0]);int y2 = Integer.parseInt(strs2[0]);int m1 = Integer.parseInt(strs1[1]);int m2 = Integer.parseInt(strs2[1]);int d1 = Integer.parseInt(strs1[2]);int d2 = Integer.parseInt(strs2[2]);int days1 = getAllDays(y1, m1, d1);int days2 = getAllDays(y2, m2, d2);return Math.abs(days1 - days2);
}private final static int[] daysInMonth = {0, 31, 28,31,30,31,30,31,31,30,31,30,31};//闰年
private boolean isLeep(int y) {return y % 4 == 0 && y % 100 != 0 || y % 400 == 0;
}/*** 以公元 1 年 1 月 1 日为基准,计算经过的日期* @return*/
private int getAllDays(int y, int m, int d) {int days = 0;//年份下的天数for (int i = 1971; i < y; i++) {days += 365;if (isLeep(i))days++;}//月份下的天数for (int i = 1; i < m; i++) {days += daysInMonth[i];}if (isLeep(y) && m > 2) days++;days += d;return days;
}

B_5170. 验证二叉树

二叉树上有 n 个节点,按从 0 到 n - 1 编号,其中节点 i 的两个子节点分别是 leftChild[i] 和 rightChild[i]。

只有 所有 节点能够形成且 只 形成 一颗 有效的二叉树时,返回 true;否则返回 false。

如果节点 i 没有左子节点,那么 leftChild[i] 就等于 -1。右子节点也符合该规则。

  • 注意:节点没有值,本问题中仅仅使用节点编号。
输入:n = 4, leftChild = [1,-1,3,-1], rightChild = [2,3,-1,-1]
输出:false

解题思路

如何判定一棵合法的二叉树:除根节点的入度为 0,其他节点的入度都为 1,即根节点不能被访问到,其他结点仅能被访问一次。

public boolean validateBinaryTreeNodes(int n, int[] leftChild, int[] rightChild) {int[] inDegree = new int[n];for (int i = 0; i < n; i++) {if (leftChild[i] != -1)inDegree[leftChild[i]]++;if (rightChild[i]!= -1)inDegree[rightChild[i]]++;}if (inDegree[0] != 0)return false;for(int i = 1; i<n; i++){if(inDegree[i] != 1)return  false;}return true;
}

B_5171. 最接近的因数

题目描述

给你一个整数 num,请你找出同时满足下面全部要求的两个整数:

  • 两数乘积等于 num + 1 或 num + 2
  • 以绝对差进行度量,两数大小最接近

你可以按任意顺序返回这两个整数。

方法一:从前往后找

/*** @date: 2/23/2020 4:43 PM* @Execution info:20ms,%,%* @Asymptotic Time Complexity:O()*/
public int[] closestDivisors(int num) {int minDiff = 0x7fffffff;int[] arr = new int[2];final int Sqrt = (int) Math.sqrt(num + 2);for (int i = 1; i <= Sqrt; i++) {if ((num + 1) % i == 0) {int r = (num + 1) / i;  int curDiff = Math.abs(i - r);if (curDiff < minDiff) {minDiff = curDiff;arr[0] = i;arr[1] = r;}}if((num + 2) % i == 0) {int r = (num + 2) / i;int curDiff = Math.abs(i - r);if (curDiff < minDiff) {minDiff = curDiff;arr[0] = i;arr[1] = r;}}}return arr;
}

方法二:从后往前找(待证明)

因为从前往后找,每次都需要找到一个最小的差 diff,我们可以从后往前找,当 i 越来越小时,num+1i\cfrac{num + 1}{i}inum+1​ 只会越来越大,所以 diff 也会越来越大,所以可以判定从后往前找的第一对就是差 diff 最小的数字。

/*** @date: 2/23/2020 4:43 PM* @Execution info:8ms,%,%*/
public int[] closestDivisors1(int num) {int[] arr = new int[2];final int Sqrt = (int) Math.sqrt(num + 2);for (int i = Sqrt; i > 0; i--) {if ((num + 1) % i == 0) {arr[0] = i;arr[1] = (num + 1) / i;return arr;}if ((num + 2) % i == 0) {arr[0] = i;arr[1] = (num + 2) / i;return arr;}}return arr;
}

B_5172. 形成三的最大倍数(没 AC)

题目描述

给你一个整数数组 digits,你可以通过按任意顺序连接其中某些数字来形成 3 的倍数,请你返回所能得到的最大的 3 的倍数。

  • 由于答案可能不在整数数据类型范围内,请以字符串形式返回答案。
  • 如果无法得到答案,请返回一个空字符串。
  • 你可以按任意顺序返回这两个整数。

解题思路

我只知道:一个数可以被 3 整除, 那么这个数的各个位数之和为 3 的倍数。


【Week】No.177相关推荐

  1. 【Linux】一步一步学Linux——sshd命令(177)

    00. 目录 文章目录 00. 目录 01. 命令概述 02. 命令格式 03. 常用选项 04. 参考示例 05. 附录 01. 命令概述 sshd命令是opensshd软件套件中的服务器守护进程. ...

  2. OpenCV 【十】——Gamma校正 ——图像灰度变化

    Gamma校正(C++.OpenCV实现) 1.作用: Gamma校正是对输入图像灰度值进行的非线性操作,使输出图像灰度值与输入图像灰度值呈指数关系: 伽玛校正由以下幂律表达式定义: 2.函数原型 v ...

  3. 【AI】CelebA数据介绍、下载及说明

    1.简介 CeleA是香港中文大学的开放数据,包含10177个名人的202599张图片 官网:http://mmlab.ie.cuhk.edu.hk/projects/CelebA.html 下载地址 ...

  4. 【bzoj1251】序列终结者(伸展树)

    [bzoj1251]序列终结者(伸展树) Description 网上有许多题,就是给定一个序列,要你支持几种操作:A.B.C.D.一看另一道题,又是一个序列 要支持几种操作:D.C.B.A.尤其是我 ...

  5. 如何保证两个不同宽高的canvas用同一组坐标正常显示_如何1人5天开发完3D数据可视化大屏 【一】...

    相信从事过数据可视化开发的你对大屏并不陌生,那么开发一个酷炫的大屏一定是很多数据可视化开发者想要做的事情. 我们使用three.js,大约一周的时间开发出了一个酷炫的数据可视化大屏: 1. 前言 由于 ...

  6. 【HDU】3441 Rotation

    题意:给出A和C(1<=A,C<=10^9),所有满足B * B * K + 1 = A * A, (K >= 0)的B,构成边长为B的正方形,等角度的围绕在一个小正方形的周围.用C ...

  7. 洛谷 P3384 【模板】树链剖分-树链剖分(点权)(路径节点更新、路径求和、子树节点更新、子树求和)模板-备注结合一下以前写的题目,懒得写很详细的注释...

    P3384 [模板]树链剖分 题目描述 如题,已知一棵包含N个结点的树(连通且无环),每个节点上包含一个数值,需要支持以下操作: 操作1: 格式: 1 x y z 表示将树从x到y结点最短路径上所有节 ...

  8. 【HDOJ图论题集】【转】

    1 =============================以下是最小生成树+并查集====================================== 2 [HDU] 3 1213 How ...

  9. 【图像算法】图像特征:GLCM灰度共生矩阵纹理特征

    [图像算法]图像特征:GLCM SkySeraph Aug 27th 2011  HQU Email:zgzhaobo@gmail.com    QQ:452728574 Latest Modifie ...

最新文章

  1. PATH 与CLASSPATH区别
  2. 机器学习泰斗- Michael I.Jordan最新演讲:机器学习前景与挑战
  3. web项目启动时 初始化加载系统参数 获取无法自动注入的服务
  4. C语言函数集(十六)
  5. C#操作XML小结_转载
  6. 【AI学院】老司机手把手带学言有三的经典书籍《深度学习之图像识别》,需要的赶紧上车吧...
  7. 一道关于完全二叉树的考研题
  8. centos编译apache php mysql,在CentOS6.7中编译安装 apache php mysql
  9. centos 7新机使用前操作
  10. c++头文件被c语言调用需要注意什么_嵌入式C语言之模块化编程
  11. [导入]设置wap服务器
  12. 《C语言程序设计:问题与求解方法》——2.15节算术表达式
  13. 深度学习知识点总结-激活函数
  14. 商务英语转计算机,BEC商务英语
  15. Windows系统cmd命令+实用工具
  16. 【JavaScript 逆向】极验四代无感验证码逆向分析
  17. Canvas画布完成一个数字钟表
  18. MMO手游地图同步方案的分析与总结
  19. 毕业设计——>基于SSM的健身房管理系统
  20. [线段树 || (STL)set ] P2161 [SHOI2009]会场预约

热门文章

  1. 小米笔记本电脑触摸板失灵解决方案
  2. Python之 列表推导式(含例题)
  3. 扇贝python离线_扇贝自动打卡Python脚本(Python3)
  4. 这本C语言入门书被翻译成五种语言出版,如今迎来了中文版第17版
  5. windows搭建go语言开发环境
  6. 爬虫实践---Scrapy-豆瓣电影影评深度爬取
  7. FFmpeg学习之八(FFmpeg源码编译)
  8. 离散数学实验报告 实验3 欧拉路的确定
  9. 70块钱打造简单家庭NAS
  10. java的微信公众号开发零(授权登陆,版本一)