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. 解决 Visual Studio 2017 RC 不兼容低版本 Visual Studio 创建的 MVC 4 项目的问题
  2. Sprint 站立会议(个人)
  3. RocketMQ源码:Broker启动过程介绍
  4. WTM系列视频教程:MVVM
  5. Material Design综合实例
  6. 【软件工程第三次作业】
  7. ASP.NET配置文件Web.config 详细解释
  8. Oracle手工创建数据库
  9. Struts2--类型转换
  10. python三国演义人物出现次数_Python分析《三国演义》人物出场次数,孔明第二,赵云第五...
  11. html如何让字体变形,jquery实现字体变形特效-css字体变成圆形
  12. OpenLayers应用一(转自http://www.cnblogs.com/lzlynn/)
  13. item_search - 根据关键词取虾皮(Shopee)商品列表
  14. My findings:CoordConv坐标嵌入技术及其泛化性能
  15. Android基础知识 — 1.3-ARM和Thumb指令详解1
  16. 虚荣和骄傲会让你跌得很惨
  17. 登堂入室之soc开发环境及硬件开发准备
  18. 嵌入式读书列表 - 参考
  19. 5G技术在实际应用面临哪些困难?能否满足应急指挥通讯网络要求?
  20. POWER PIVOT的使用介绍2

热门文章

  1. 数字中台视角下的企业技术平台规划与实践
  2. echarts 地图上边画柱状图
  3. linux7 设置隐藏账号,科学网-CentOS 7 在登录界面用户列表中隐藏指定账号-乔磊的博文...
  4. 微信群服务器失败是什么原因,为什么微信群转让群主失败?微信群转让群主方法是什么?...
  5. 程序员V.S.编程语言:你上“贼船”了吗?
  6. 危骆邦油邦快讯|山东地炼报价行情早知道
  7. 阿克曼函数java代码_阿克曼函数
  8. Android滑动头部控件
  9. 宇视摄像机码流类型定码率和变码率的区别?
  10. 20行Python代码,轻轻松松获取各路书本,你还在花钱买着看嘛~