[Leetcode]第 71 场双周赛

前言

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

加油!

目录

  • 前言
  • 5984. 拆分数位后四位数字的最小和
    • 题目展示
    • 题意解读
    • 解题思路
    • 代码实现
    • 执行结果
  • 5985. 根据给定数字划分数组
    • 题目展示
    • 题意解读
    • 解题思路
    • 代码实现
    • 执行结果
  • 5986. 设置时间的最少代价
    • 题目展示
    • 题意解读
    • 解题思路
    • 代码实现
    • 执行结果
  • 结语

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

题目展示

[Leetcode]第 71 场双周赛_第1张图片

题意解读

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

解题思路

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

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

代码实现

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;
    }
}

执行结果

[Leetcode]第 71 场双周赛_第2张图片

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

题目展示

[Leetcode]第 71 场双周赛_第3张图片

题意解读

题目意思是给定一个数组和一个值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<len;i++){
            if(nums[i]<pivot){
                a[slow++]=nums[i];
            }
        }
        for(int i=0;i<len;i++){
            if(nums[i]==pivot){
                a[slow++]=nums[i];
            }
        }
        for(int i=0;i<len;i++){
            if(nums[i]>pivot){
                a[slow++]=nums[i];
            }
        }
        return a;
    }
}

执行结果

[Leetcode]第 71 场双周赛_第4张图片

5986. 设置时间的最少代价

题目展示

[Leetcode]第 71 场双周赛_第5张图片

题意解读

这个题就是调时间,题意是给我们一个时间以秒为单位,让我们在一个显示器上调时间到需要调的时长即可,格式是四位数字,前两位表示分,后两位表示秒。最大是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;
    }
}

执行结果

[Leetcode]第 71 场双周赛_第6张图片

结语

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

你可能感兴趣的:(精选算法题,leetcode,算法,职场和发展)