一、数组变换(Biweekly12)

题目描述:
首先,给你一个初始数组 arr。然后,每天你都要根据前一天的数组生成一个新的数组。

第 i 天所生成的数组,是由你对第 i-1 天的数组进行如下操作所得的:

假如一个元素小于它的左右邻居,那么该元素自增 1。
假如一个元素大于它的左右邻居,那么该元素自减 1。
首、尾元素 永不 改变。
过些时日,你会发现数组将会不再发生变化,请返回最终所得到的数组。

示例 1:

输入:[6,2,3,4]
输出:[6,3,3,4]
解释:
第一天,数组从 [6,2,3,4] 变为 [6,3,3,4]。
无法再对该数组进行更多操作。
示例 2:

输入:[1,6,3,4,3,5]
输出:[1,4,4,4,4,5]
解释:
第一天,数组从 [1,6,3,4,3,5] 变为 [1,5,4,3,4,5]。
第二天,数组从 [1,5,4,3,4,5] 变为 [1,4,4,4,4,5]。
无法再对该数组进行更多操作。

提示:

1 <= arr.length <= 100
1 <= arr[i] <= 100

emm只想到最笨拙的解法

class Solution {
    public List<Integer> transformArray(int[] arr) {
        ArrayList<Integer> result = new ArrayList<>();
        while (true){
            int[] ints = Arrays.copyOf(arr,arr.length);
            boolean flag = true;
            for (int i = 1; i < ints.length - 1; i++) {
                if(arr[i] > arr[i - 1] && arr[i] > arr[i + 1]){
                    ints[i] --;
                    flag = false;
                    continue;
                }
                if(arr[i] < arr[i - 1] && arr[i] < arr[i + 1]){
                    ints[i] ++;
                    flag = false;
                }
            }
            arr = Arrays.copyOf(ints,ints.length);
            if(flag){
                break;
            }
        }
        for (int i = 0; i < arr.length; i++) {
            result.add(arr[i]);
        }

        return result;
    }
}
为了优化 `calculateEndDate` 函数,我们可以将 `repeatType` 参数的枚举值重构为更直观的形式,比如 "每周"、"隔日" 和 "隔周",以便用户更容易理解和使用。以下是优化后的代码: ```javascript const RepeatTypes = { WEEKLY: '每周', BIWEEKLY: '隔日', BIWEEKLY_ONCE: '隔周', // 添加一个新的选项表示每隔一周的一次 }; // 更新 getNextDate 函数的 switch 语句 switch (RepeatTypes[repeatType]) { case '每周': // ...(保持原有代码) break; case '隔日': // ...(保持原有代码) break; case '隔周': // ...(修改这里,例如:找到距离当前日期最近的下一个隔周一) const nextMonday = Math.ceil((daysOfWeek.indexOf(1) - date.getDay()) % 7) + 1; // 1代表周一 const daysUntilNextClass = nextMonday - dayOfWeek; return new Date(date.getTime() + daysUntilNextClass * 24 * 60 * 60 * 1000); default: throw new Error('无效的重复类型'); } // 更新 calculateEndDate 函数中对 repeatType 的处理 if (repeatType === 'BIWEEKLY_ONCE') { // 检查是工作日隔周,找到最近的周内的间隔时间 const nextWeekday = daysOfWeek.find(day => day <= 5); // 5代表周六或周日 // ... } // 更新 repeatType 参数的输入提示或文档说明,添加新的选项 ``` 现在,`repeatType` 变成了枚举形式,用户可以根据易于理解的文字选择相应的重复模式。在处理 `BIWEEKLY_ONCE` 时,我们找到了最近的周内对应的工作日作为重复基准。这样提高了代码的可读性和易用性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值