这套题不算难,但是因为是昨天晚上太晚了,好久没有大晚上写过代码了,有点不适应,今天上午一看还是挺简单的

给你一个字符串 date ,它的格式为 Day Month Year ,其中:

  • Day 是集合 {"1st", "2nd", "3rd", "4th", ..., "30th", "31st"} 中的一个元素。
  • Month 是集合 {"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"} 中的一个元素。
  • Year 的范围在 ​[1900, 2100] 之间。

请你将字符串转变为 YYYY-MM-DD 的格式,其中:

  • YYYY 表示 4 位的年份。
  • MM 表示 2 位的月份。
  • DD 表示 2 位的天数。

示例 1:

输入:date = "20th Oct 2052"
输出:"2052-10-20"

示例 2:

输入:date = "6th Jun 1933"
输出:"1933-06-06"

示例 3:

输入:date = "26th May 1960"
输出:"1960-05-26"

提示:

  • 给定日期保证是合法的,所以不需要处理异常输入。
 class Solution {
public String reformatDate(String date) {
//先把这三个分开,日月年(按空格分成数组)
String[] num = date.split(" ");
//先求日,日是前面的数字就好,20th就是20,
char[] day = num[0].toCharArray();
String days ="";
//如果这个字符是数字就可以拿出来
for (char c:day){
if(Character.isDigit(c)){
days+=c;
}
}
//如果是6th这种,拿出来是6不符合日期,如要前面加个0
if(days.length()<2){
days="0"+days;
}
//求月,月的话需要数组,然后找到下标+1就是月份,因为数组下标是从0开始,找到的下标是当前月份-1
String months="";
String[] month= {"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"};
for (int i=0;i<12;i++){
if(month[i].equals(num[1])){
months=(i+1)+"";
}
}
//同样的要做处理,防止1月不符合日期格式,要在前面加0
if(months.length()<2){
months="0"+months;
}
//直接按照输出格式输出
return num[2]+"-"+months+"-"+days;
}
}

给你一个数组 nums ,它包含 n 个正整数。你需要计算所有非空连续子数组的和,并将它们按升序排序,得到一个新的包含 n * (n + 1) / 2 个数字的数组。

请你返回在新数组中下标为 left 到 right (下标从 1 开始)的所有数字和(包括左右端点)。由于答案可能很大,请你将它对 10^9 + 7 取模后返回。

示例 1:

输入:nums = [1,2,3,4], n = 4, left = 1, right = 5
输出:13
解释:所有的子数组和为 1, 3, 6, 10, 2, 5, 9, 3, 7, 4 。将它们升序排序后,我们得到新的数组 [1, 2, 3, 3, 4, 5, 6, 7, 9, 10] 。下标从 le = 1 到 ri = 5 的和为 1 + 2 + 3 + 3 + 4 = 13 。

示例 2:

输入:nums = [1,2,3,4], n = 4, left = 3, right = 4
输出:6
解释:给定数组与示例 1 一样,所以新数组为 [1, 2, 3, 3, 4, 5, 6, 7, 9, 10] 。下标从 le = 3 到 ri = 4 的和为 3 + 3 = 6 。

示例 3:

输入:nums = [1,2,3,4], n = 4, left = 1, right = 10
输出:50

提示:

  • 1 <= nums.length <= 10^3
  • nums.length == n
  • 1 <= nums[i] <= 100
  • 1 <= left <= right <= n * (n + 1) / 2
 class Solution {
public int rangeSum(int[] nums, int n, int left, int right) {
LinkedList<Integer> list = new LinkedList<>();
int sum = 0;
//暴力循环每一种情况
for (int i = 0; i < nums.length; i++) {
sum = 0;
for (int j = i; j < nums.length; j++) {
sum += nums[j];
list.add(sum);
}
}
//给每一种子数组和排序
Collections.sort(list);
int res = 0;
//找到相对范围,因为下标是从0开始,但题目是从1开始,所以都要减1
for (int i = left - 1; i <= right - 1; i++) {
res+=list.get(i);
if (res > 1000000007 ) {
res -= 1000000007;
}
}
return res;
}
}

给你一个数组 nums ,每次操作你可以选择 nums 中的任意一个数字并将它改成任意值。

请你返回三次操作后, nums 中最大值与最小值的差的最小值。

示例 1:

输入:nums = [5,3,2,4]
输出:0
解释:将数组 [5,3,2,4] 变成 [2,2,2,2].
最大值与最小值的差为 2-2 = 0 。

示例 2:

输入:nums = [1,5,0,10,14]
输出:1
解释:将数组 [1,5,0,10,14] 变成 [1,1,0,1,1] 。
最大值与最小值的差为 1-0 = 1 。

示例 3:

输入:nums = [6,6,0,1,1,4,6]
输出:2

示例 4:

输入:nums = [1,5,6,14,15]
输出:1

提示:

  • 1 <= nums.length <= 10^5
  • -10^9 <= nums[i] <= 10^9
 class Solution {
public int minDifference(int[] nums) {
/*
这里有一个问题就是,我只能改三次,如果改的话,肯定是把最大的改小了,或者把最小的改大了
我们先排个序,改的三次不是在头就是在尾,我们用后四个分别减去前四个,
求出最小的,那其他三个就是比较大的,改的时候改那三个就可以了 */ Arrays.sort(nums);
int n = nums.length;
//如果不到四个元素,证明把其他三个全换成和另一个一样的就可以了,结果就为0了
if (n <= 4) {
return 0;
}
return Math.min(Math.min(nums[n - 1] - nums[3], nums[n - 2] - nums[2]), Math.min(nums[n - 3] - nums[1], nums[n - 4] - nums[0])); }
}

Alice 和 Bob 两个人轮流玩一个游戏,Alice 先手。

一开始,有 n 个石子堆在一起。每个人轮流操作,正在操作的玩家可以从石子堆里拿走 任意 非零 平方数 个石子。

如果石子堆里没有石子了,则无法操作的玩家输掉游戏。

给你正整数 n ,且已知两个人都采取最优策略。如果 Alice 会赢得比赛,那么返回 True ,否则返回 False 。

示例 1:

输入:n = 1
输出:true
解释:Alice 拿走 1 个石子并赢得胜利,因为 Bob 无法进行任何操作。

示例 2:

输入:n = 2
输出:false
解释:Alice 只能拿走 1 个石子,然后 Bob 拿走最后一个石子并赢得胜利(2 -> 1 -> 0)。

示例 3:

输入:n = 4
输出:true
解释:n 已经是一个平方数,Alice 可以一次全拿掉 4 个石子并赢得胜利(4 -> 0)。

示例 4:

输入:n = 7
输出:false
解释:当 Bob 采取最优策略时,Alice 无法赢得比赛。
如果 Alice 一开始拿走 4 个石子, Bob 会拿走 1 个石子,然后 Alice 只能拿走 1 个石子,Bob 拿走最后一个石子并赢得胜利(7 -> 3 -> 2 -> 1 -> 0)。
如果 Alice 一开始拿走 1 个石子, Bob 会拿走 4 个石子,然后 Alice 只能拿走 1 个石子,Bob 拿走最后一个石子并赢得胜利(7 -> 6 -> 2 -> 1 -> 0)。

示例 5:

输入:n = 17
输出:false
解释:如果 Bob 采取最优策略,Alice 无法赢得胜利。

提示:

  • 1 <= n <= 10^5
 class Solution {
public boolean winnerSquareGame(int n) {
/*
递推思路
list保存一下可以取的石子的数量
我们创建一个n+1的数组,循环每一个数量的石子数
对于每一个石子数,只要当前石子数-可以取的石子数就证明可以取到这个数量
并且数组当前石子数-可以取的石子数还要等于0,证明是没取过
如果数组当前石子数-可以取的石子数等于1,说明我之前取过,
如果我取过的话,我就不能再取了,我取过,该换bob取了 */
ArrayList<Integer> list = new ArrayList<>();
for (int i = 1; i * i <= n; i++) {
//把可以取的数量都放进list
list.add(i * i);
}
int[] dp = new int[n + 1];
for (int i = 1; i <= n; i++) {
//循环每一种可以取的石子数
for (int num : list) {
//如果上一次不是我取得,证明我可以取,我取完得dp为1,bob取完得dp为0
if (num <= i && dp[i - num] == 0) {
dp[i] = 1;
}
}
}
return dp[n] == 1;
}
}

又不懂或者写的不恰当的地方欢迎大佬评论

Java实现 LeetCode第30场双周赛 (题号5177,5445,5446,5447)的更多相关文章

  1. LeetCode第8场双周赛(Java)

    这次我只做对一题. 原因是题目返回值类型有误,写的是 String[] ,实际上应该返回 List<String> . 好吧,只能自认倒霉.就当涨涨经验. 5068. 前后拼接 解题思路 ...

  2. LeetCode 第 15 场双周赛

    1287.有序数组中出现次数超过25%的元素 1288.删除被覆盖区间 1286.字母组合迭代器 1289.下降路径最小和 II 下降和不能只保留原数组中最小的两个,hacked. 1287.有序数组 ...

  3. LeetCode 第 14 场双周赛

    基础的 api 还是不够熟悉啊 5112. 十六进制魔术数字 class Solution { public: char *lltoa(long long num, char *str, int ra ...

  4. LeetCode第29场双周赛题解

    第一题 用一个新数组newSalary保存去掉最低和最高工资的工资列表,然后遍历newSalary,计算总和,除以元素个数,就得到了平均值. class Solution { public: doub ...

  5. Java实现 LeetCode 641 设计循环双端队列(暴力)

    641. 设计循环双端队列 设计实现双端队列. 你的实现需要支持以下操作: MyCircularDeque(k):构造函数,双端队列的大小为k. insertFront():将一个元素添加到双端队列头 ...

  6. leetcode-第11场双周赛-5089-安排会议日程

    题目描述: 自己的提交: class Solution: def minAvailableDuration(self, slots1: List[List[int]], slots2: List[Li ...

  7. leetcode-第11场双周赛-5088-等差数列中缺失的数字

    题目描述: 自己的提交: class Solution: def missingNumber(self, arr: List[int]) -> int: if len(arr) == 2: re ...

  8. leetcode-第五场双周赛-1134-阿姆斯特朗数

    第一次提交: class Solution: def isArmstrong(self, N: int) -> bool: n = N l = len(str(N)) res = 0 while ...

  9. leetcode-第五场双周赛-1133-最大唯一数

    第一次提交: class Solution: def largestUniqueNumber(self, A: List[int]) -> int: dict = {} for i in A: ...

随机推荐

  1. node-sass问题

    cnpm install node-sass@latest 或者 所以用npm install -g cnpm --registry=https://registry.npm.taobao.org , ...

  2. 利用Azure Functions和k8s构建Serverless计算平台

    题记:昨晚在一个技术社区直播分享了"利用Azure Functions和k8s构建Serverless计算平台"这一话题.整个分享分为4个部分:Serverless概念的介绍.Az ...

  3. Git 居然可以用来跟女神聊天?

    Git 是用来做啥的?想必码农朋友都知道,Git 是版本控制软件,是软件开发过程中团队协作不可或缺的软件. 但是,作为版本控制软件的 Git ,能跟聊天工具扯上关系吗?这二者似乎毫无关系,但脑洞大开的 ...

  4. mysql 出现You can't specify target table for update in FROM clause错误的解决方法

    mysql出现You can’t specify target table for update in FROM clause 这个错误的意思是不能在同一个sql语句中,先select同一个表的某些值 ...

  5. Python3-collections模块-容器数据类型

    Python3中的collections模块实现了一些专业的容器数据类型 最常用的容器数据类型 字典.列表和元组.集合都已经被Python默认导入,但在实现一些特定的业务时,collections模块 ...

  6. java中HashMap和Hashtable的区别

    1.HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,主要区别在于HashMap允许空(null)键值(key),由于非线程安全,在只有一个线程访问的情况下, ...

  7. MyEclipse 选中属性或方法后 相同的不变色

    myeclipse-->windows-->java-->Editor-->content Assist-->Mark Occurrencmyeclipse-->w ...

  8. 【CSGRound1】天下第一 题解

    [CSGRound1]天下第一 https://www.luogu.com.cn/problem/P5635 分析题目: 题目中说明,有T组数据,但是mod只有一个.很显然,这道题可以用记忆化搜索嘛! ...

  9. linux下 解释 终端命令 ls -al或者ls -li 输出的信息

    $ ls -al            drwxr-xr-x.            wjshan0808    wjshan0808        Sep :    .cache $ ls -li ...

  10. 关于WebServices的调用

    1.使用soapui测试接口是否能通    具体操作步骤请查看:https://www.cnblogs.com/BINDAI/p/13201513.html Soapui请求结果集 2.获得soapu ...