我正在考虑这个代码挑战:

给出一个array的整数和另一个整数m.

Select 一个介于0m之间的整数,并用该整数替换整数输入数组中出现的0,然后判断相邻数组项之间的绝对差异.

找出每种情况下的最大绝对差值.然后finally找出所有这些最大值中的minimum个.

Example 1:

array = [4,0,3,2]
m = 2;

Expected output:

2

Explanation:

  • Select i=0,将数组中出现的所有0替换为值i,在本例中为0:[4,0,3,2].求出相邻元素之间的绝对差[4-0,3-0,3-2]=[4,3,2].这些绝对值中的最大值为4.
  • Select i=1,将数组中出现的所有0替换为值i,在本例中为1:[4,1,3,2].求相邻元素之间的绝对差[4-1,3-1,3-2]=[3,2,1].这些绝对值中的最大值为3.
  • Select i=2,将数组中出现的所有0替换为值i,在本例中为2:[4,2,3,2].求相邻元素之间的绝对差[4-2,3-2,3-2]=[2,1,1].这些绝对值中的最大值为2.
  • 最后,所有极大值的最小值是min(4,3,2)=2,这就是答案.

constraints:

  • array有1到10个5
  • array[i]的范围从0到109
  • m的范围从0到109

这是我的代码:

static int solve(List<Integer> list, int m) {
    int response = Integer.MAX_VALUE;
    int n = list.size();
    for(int i=0; i<=m ;i++) {
        int j = list.get(0);
        int max = 0;
        if(j==0) j = i;
        for(int k=1; k<n; k++) {
            int e = list.get(k);
            if(e==0) e = i;
            int abs = Math.abs(e-j);
            max = Math.max(max, abs);
            j = e;
        }
        response = Math.min(response, max);
    }
    return response;
}

该编码的时间复杂度为O(m*n).

解决此问题的正确方法是什么,以降低时间复杂性?

推荐答案

解析一次数组,找出所有不为零但与零相邻的元素的最大值和最小值.

理想的答案是(max+min)/2,任意四舍五入.

如果此值大于m,请 Select m,否则 Select 此选项.

Java相关问答推荐

Maven Google Sheets版本问题

Android -如何修复Java.time.zone. ZoneRulesExcept:未知时区ID:Europe/Kyiv

BiPredicate和如何使用它

同时运行JUnit测试和Selenium/Cucumber测试时出现问题

Javascript在边界中心调整ImageView大小

使用Java Streams API比较两个不同的Java集合对象和一个公共属性

将成为一个比较者.比较…在现代Java中,编译器会对`CompareTo`方法进行优化吗?

Spring Batch 5-不要让它在数据库中自动创建表

为什么不应用类型推断?

我不能再在Android Studio Hedgehog上用Java语言创建新项目了吗?

为什么在maven中,getLast方法不适用于List?

带错误BER验证的itext8签名返回pdf

格式中的特定回录键-值对

Javadoc在方法摘要中省略方法

声明MessageChannel Bean的首选方式

没有使用Lombok生成的参数

从12小时开始的日期模式

处理4.3问题:javax.xml.ind包不存在(&Q;).您可能在学习GitHub教程时遗漏了库.&Q

在Spring Boot中使用咖啡因进行缓存

移动二维数组的行