【Leetcode】第 71 场双周赛

简介: 参加的第二场周赛,a了前两题,第三题因为叫的吃饭了就没做,回头一看都不难。但是正式比赛中能不能做出来还不一定哈哈哈。

前言


参加的第二场周赛,a了前两题,第三题因为叫的吃饭了就没做,回头一看都不难。但是正式比赛中能不能做出来还不一定哈哈哈。


加油!


5984. 拆分数位后四位数字的最小和

题目展示

微信图片_20220521122945.png


题意解读

这个题意很简单,就是给你一个四位整数,然后让你把这个四位整数拆分为两个数字,对数位没有要求,最后要求返回组成的这个数字的最小和。


解题思路

首先要想要数字和最小那么我们肯定是两位两位的组合,然后四个数字里面最小的两个数字分别当组合出来两个数字的第一位,其他的则分别当第二位。


我们直接使用求余把这个四位整数拆分为四个数,储存在数组里面,然后进行排序。在按照大小规则两两组合即可。


代码实现

class Solution {
    public int minimumSum(int num) {
        int [] a = new int[4];
        for(int i=0;i<4;i++){
            a[i] = num%10;
            num/=10;
        }
        Arrays.sort(a);
        int n = a[0]*10+a[2];
        int m = a[1]*10+a[3];
        return m+n;
    }
}


执行结果

image.png


5985. 根据给定数字划分数组

题目展示

微信图片_20220521122859.png


题意解读

题目意思是给定一个数组和一个值pivot,要求对这个数组进行排序。排序要求是比这个值pivot小的就放在pivot的左边,比它大的就放在它的右边。对于其他数字的相对顺序要求不变。


解题思路

既然要求其他数字的相对顺序顺序要求不变,那么我们直接新创建一个相同大小的数组来填充这个数组就行。


我们分三次来填充,分别来填充小于pivot的值,等于pivot的值,大于pivot的值到数组里面。等三次填充完之后这个新的数组也就是我们要返回的结果数组了。


我们每次填充使用for循环+if判断来实现。


代码实现

class Solution {
    public int[] pivotArray(int[] nums, int pivot) {
        int len = nums.length;
        int [] a = new int[len];
        int slow=0;
        for(int i=0;i
            if(nums[i]
                a[slow++]=nums[i];
            }
        }
        for(int i=0;i
            if(nums[i]==pivot){
                a[slow++]=nums[i];
            }
        }
        for(int i=0;i
            if(nums[i]>pivot){
                a[slow++]=nums[i];
            }
        }
        return a;
    }
}


执行结果

image.png


5986. 设置时间的最少代价

题目展示

微信图片_20220521122826.png


题意解读

这个题就是调时间,题意是给我们一个时间以秒为单位,让我们在一个显示器上调时间到需要调的时长即可,格式是四位数字,前两位表示分,后两位表示秒。最大是99 分 99 秒。我们每次调整数字到我们需要的数字和输入这个数字都需要消耗“代价”,我们最后要返回代价最小是多少。


解题思路

时间最大是99 分 99 秒,那么我们得到的一个时长就有两种表达方式:


一种是正常的分与秒(都是小于60的)


还有一种是在正常的分上减1,同时秒上加60。


不过这两种都要保证分与秒上都不能超过99,我们对每一种格式都得进行验证。


最后算出代价之后,返回代价较小的一个答案即可。


代码实现

class Solution {
    public int minCostSetTime(int startAt, int moveCost, int pushCost, int targetSeconds) {
        int min = targetSeconds/60;
        int sec = targetSeconds%60;
        int res1 = CostSetTime(startAt,moveCost,pushCost,min,sec);
        min-=1;
        sec+=60;
        int res2 = CostSetTime(startAt,moveCost,pushCost,min,sec);
        return Math.min(res1,res2);
    }
    public int CostSetTime(int startAt, int moveCost, int pushCost, int min,int sec){
        if(min>99||sec>99) return Integer.MAX_VALUE;
        int res=0;
        int [] a = new int[]{min/10,min%10,sec/10,sec%10};
        int n=0;
        while(a[n]==0) n++;
        while(n<4){
            if(startAt==a[n]) res+=pushCost;
            else {
                res=res+pushCost+moveCost;
                startAt=a[n];
            }
            n++;
        }
        return res;
  }


执行结果

image.png


结语

第四题放弃了,刚开始吃透前三个题就行了。别骂哈哈哈



相关文章
【Leetcode】- 第 29 场双周赛
【Leetcode】- 第 29 场双周赛
|
4月前
力扣双周赛 -- 117(容斥原理专场)
力扣双周赛 -- 117(容斥原理专场)
|
10月前
|
算法 索引
LeetCode 双周赛 107(2023/06/24)滑动窗口与离散化
> **本文已收录到 [AndroidFamily](https://github.com/pengxurui/AndroidFamily),技术和职场问题,请关注公众号 \[彭旭锐] 和 \[BaguTree Pro] 知识星球提问。**
51 0
LeetCode 双周赛 107(2023/06/24)滑动窗口与离散化
|
10月前
|
机器人
LeetCode 双周赛 106(2023/06/10)两道思维题
往期回顾:[LeetCode 单周赛第 348 场 · 数位 DP 模版学会了吗?](https://mp.weixin.qq.com/s/4aLHpyaLOUEHSaX2X8e5FQ)
63 0
LeetCode 双周赛 106(2023/06/10)两道思维题
|
11月前
|
存储 容器
|
11月前
|
存储 数据安全/隐私保护
|
11月前
|
人工智能 算法 测试技术
LeetCode 双周赛 103(2023/04/29)区间求和的树状数组经典应用
这场周赛是 LeetCode 双周赛第 103 场,难得在五一假期第一天打周赛的人数也没有少太多。这场比赛前 3 题比较简单,我们把篇幅留给最后一题。
61 0
|
边缘计算 缓存 算法
LeetCode 双周赛 102,模拟 / BFS / Dijkstra / Floyd
昨晚是 LeetCode 双周赛第 102 场,你参加了吗?这场比赛比较简单,拼的是板子手速,继上周掉大分后算是回了一口血 😁。
87 0
|
人工智能 算法 测试技术
LeetCode 双周赛 101,DP / 中位数贪心 / 裴蜀定理 / Dijkstra / 最小环
这周比较忙,上周末的双周赛题解现在才更新,虽迟但到哈。上周末这场是 LeetCode 第 101 场双周赛,整体有点难度,第 3 题似乎比第 4 题还难一些。
66 0