- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一道算法题,其中给出了从 1 到 N 的数字,并且要执行一些操作,然后必须在其中找到最小值/最大值。
两个运算——加法和减法
运算的形式为 a b c d ,其中a是要执行的运算,b是起始数,c是结束数,d是要加/减的数
例如
suppose numbers are 1 to N and N =5
1 2 3 4 5
我们按照以下方式执行操作
1 2 4 5
2 1 3 4
1 4 5 6
通过这些操作,我们将得到从 1 到 N 的数字
1 7 8 9 5
-3 3 4 9 5
-3 3 4 15 11
所以最大值是15,最小值是-3
我的方法:我已经取了数字的下限和上限,在这种情况下它是 1 和 5 仅存储在一个数组中并应用操作,然后找到最小值和最大值。
有没有更好的方法?
最佳答案
我假设所有更新(加法/减法)操作都发生在找到最大值/最小值之前。对于将更新和最小/最大操作混合在一起,我没有好的解决方案。
您可以使用普通数组,其中数组索引 i 处的值是索引 i 与原始数组索引 (i - 1) 之间的差值。这使得从我们数组的索引 0 到索引 i 的总和成为原始数组的索引 i 处的值。
减法是与取反的数相加,所以它们可以类似地处理。当我们需要将 k 添加到从索引 i 到索引 j 的原始数组时,我们将 k 添加到我们数组的索引 i,并减去 k 到我们数组的索引 (j + 1)。每次更新需要 O(1) 时间。
您可以通过累加求和并记录最大/最小值来找到原始数组的最小/最大。每次操作需要 O(n) 时间。我假设这是对整个阵列完成一次。
伪代码:
a[N] // Original array
d[N] // Difference array
// Initialization
d[0] = a[0]
for (i = 1 to N-1)
d[i] = a[i] - a[i - 1]
// Addition (subtraction is similar)
add(from_idx, to_idx, amount) {
d[from_idx] += amount
d[to_idx + 1] -= amount
}
// Find max/min for the WHOLE array after add/subtract
current = max = min = d[0];
for (i = 1 to N - 1) {
current += d[i]; // Sum from d[0] to d[i] is a[i]
max = MAX(max, current);
min = MIN(min, current);
}
关于c++ - 求一系列数字加减后的最小值和最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11832197/
我需要帮助返回表达式的值(表达式是函数的参数)。 这是我目前尝试过的。这只是一个随机方程的例子,我的计划是了解如何正确求解它,以便稍后将其转换为函数 sum = 0 eq = '2+4-5' stri
您好,我正在尝试计算按键时一行中多个字段的总和(我的代码将包含多行)(其中一些使用加法,一些使用减法)但由于我是新手,我对 JQuery 不太熟悉。在我的场景中,B.Salary、Rec.comm、S
所以它应该做的是能够接收一个 const char* str 并将其更改为一个 int,然后将其转换回一个字符串以供输出。但它也应该能够将这些加减在一起。我正在通过我的前两个测试,但我的添加发生了一些
这个问题在这里已经有了答案: Retain precision with double in Java (24 个回答) 关闭9年前。 所以当我在 Java 中使用 Doubles 进行加法或减法时,
Java 的开发过程中免不了与 Date 类型纠缠,准备总结一下项目经常使用的日期相关操作,JDK 版本 1.7,如果能够帮助大家节约那么几分钟起身活动一下,去泡杯咖啡,便是极好的,嘿嘿。当然,我
我将用户提供的 html 保存在数据库中,“指定或不指定”css 字体大小。 并尝试制作一个按钮来放大或减小 dom 上的字体大小,但保持相对大小。 我将变量 def_size 定义为 16px,并将
我有一个看起来很容易解决的问题,但是我不确定语法。 我需要运行 if/else 语句,但我不确定如何正确设置条件。 错误代码: if (float_a = float_b or is within +
刚开始学习 C#。我计划将它用于繁重的数学模拟,包括数值求解。问题是我在加减 double 以及进行比较时会出现精度损失。代码及其返回的内容(在注释中)如下: namespace ex3 {
我是一名优秀的程序员,十分优秀!