旧代码,先贴上来,待整理
package cn.ustc;
import java.util.List;
public class MaxArray{
/**
* getMax方法用于获得最有n个元素的整数数组list中使得具有最大乘积的n-1个
* 元素的数组
* @param list
* @author xyjie
*/
public void getMax(List<Integer> list){
int negSize = 0; //用于记录负整数的个数
int posSize = 0; //用于记录正整数的个数
int zeroSize = 0; //用于记录0的个数
int maxNeg = Integer.MIN_VALUE; //用于保存最大的负整数
int minNeg = Integer.MAX_VALUE; //用于保存最小的负整数
int minPos = Integer.MAX_VALUE; //用于保存最小的正整数
int listSize = list.size();
int maxNegPosition = listSize; //用于保存最大负整数的位置
int minNegPosition = listSize; //用于保存最小负整数的位置
int minPosPosition = listSize; //用于保存最小正整数的位置
int zeroPosition = listSize; //用于保存一个0的位置
int currentValue;
for(int i = 0; i < listSize; i++){
currentValue = list.get(i);
if(currentValue > 0){ //当前处理值为正整数
++posSize;
if(currentValue < minPos){ //如果当前值比minPos小,更新minPos和minPosition
minPos = currentValue;
minPosPosition = i;
}
}else if(currentValue < 0){ //当前处理值为负整数
++negSize;
if(currentValue > maxNeg){ //如果当前值比maxNeg大,更新maxNeg和maxNegPosition
maxNeg = currentValue;
maxNegPosition = i;
}else if(currentValue < minNeg){ //如果当前值比minNeg小,更新minNeg和minNegPosition
minNeg = currentValue;
minNegPosition = i;
}
}else{ //当前处理值为0
++zeroSize;
zeroPosition = i; //zeroPosition记录了最后一次0出现的位置
}
}
if(zeroSize >= 2){ //如果数组中0的个数大于2,则其任意n-1个元素的积均为0
list.remove(0);
}else if(zeroSize == 1){ //数组中有一个数值为0
if(negSize % 2 == 0){ //有偶数个负数
list.remove(zeroPosition);
}else{ //有奇数个负数
list.remove(maxNegPosition); //任意删除一个数,这里删除了最大的负数(删除其他位置的非0元素也是一样的效果)
}
}else if (zeroSize == 0){ //数组中没有值为0的元素
if(negSize % 2 == 0){ //有偶数个负数
if(posSize == 0){ //正数个数为0
list.remove(minNegPosition); //删除绝对值最大的负数
}else{
list.remove(minPosPosition); //删除最小的正整数
}
}else{ //有奇数个负数
list.remove(maxNegPosition); //删除值最大的负数
}
}
}
}
分享到:
相关推荐
/*加和*/ //给定一个整数t,以及n个整数,在这n个整数中找到加和为t的所有组合。
通过可变参数计算n个数的乘积: 代码如下: list = [] def the_input(count=eval(input("输入乘数的总个数:"))): for i in range(count): N=eval(input("依次输入乘数:")) list.append(N) ...
Java中List对象的分页思想-按10个或者n个数对list进行分组 Java中List对象的分页思想是一种常用的数据处理技术,通过将一个大的List对象分割成多个小的List对象,每个小的List对象包含一定数量的元素,例如10个或n...
首先,读取n个整数到一个列表中,然后使用之前定义的gcd函数,依次计算列表中每对整数的最大公约数,直到只剩下一个数,这就是n个数的最大公约数。以下是一个可能的解决方案: ```python def gcd_n_numbers(numbers...
排列是指从n个不同元素中取出m(m≤n)个元素,按照一定的顺序排成一列的所有可能的方式;组合则是指不考虑元素的顺序,仅考虑元素的选取。在这个问题中,我们不仅要考虑元素的选取,还要考虑它们的顺序,因此属于...
- 第一行是一个整数`n`(`1 <= n ),表示元素的数量。 - 第二行包含`n`个字符,这些字符即为待排列的元素。 #### 输出格式 针对每组输入数据,输出所有不同的排列,每个排列占一行。在最后一行输出总的排列数量。...
以上这篇python 寻找list中最大元素对应的索引方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持软件开发网。 您可能感兴趣的文章:python numpy和list查询其中某个数的个数及定位方法...
本问题要求我们创建一个动态数组,其长度由用户输入决定,然后从屏幕上接收一组数字填充数组。接着,我们需要实现一系列功能,包括找到数组中的最大值、最小值以及它们对应的索引。下面将详细介绍如何实现这个任务。...
这个题目要求实现一个`Sum`函数,它接收一个整数数组`List[]`和它的长度`N`,返回数组所有元素的和。这可以通过遍历数组并累加元素实现。 ```c int Sum(int List[], int N) { int sum = 0; for (int i = 0; i < N...
Description 设集合R={r1,r2,...,rn}... if (Findsame(list,k,i))//判断第i个元素是否在list[k,i-1]中出现过 continue; Swap (list[k], list[i]); PermExcludeSame(list, k+1, m); Swap (list[k], list[i]); } }
### C++习题解析:超长数列中n个整数排列 在计算机科学与编程领域,处理数据结构和算法是基础且核心的部分。题目“C++习题-超长数列中n个整数排列”旨在通过一个具体的类实现,来探讨如何有效地对数列中的元素进行...
2. **边界检查**:确保总和S在N个元素的可能范围内,即`S >= N * min`且`S <= N * max`。 3. **递归拆分**:使用递归函数`split()`来逐个拆分子整数。 - 计算剩余可分配的值`changed`。 - 根据当前可分配的值和...
在Python编程语言中,计算一个整数列表的乘积是一项常见的任务,这通常涉及到对列表中的每个元素进行迭代并逐个相乘。标题和描述中给出的问题是:编写一段Python代码,接受一个包含若干整数的列表作为输入,并输出...
组合是数学中的一种选择方式,不考虑顺序,例如从n个不同元素中选取k个元素,称为n选k。在C#中,我们可以使用递归或者回溯法来生成所有可能的组合。 在解决这个问题时,我们需要一个数组(数据集)和一个目标值。...
List 中的每个元素可以是任何类型,例如字符串、整数、对象等。在本例中,我们使用 ArrayList 来存储时间字段。 时间字段和时间差 在本例中,我们需要计算每个元素之间的时间差异。时间字段使用 SimpleDateFormat ...
在编程领域,生成1到N的不重复随机数是一个常见的需求,这在各种场景中都有应用,例如模拟抽奖、创建随机测试数据或者在游戏中分配资源等。这个任务涉及到两个主要的知识点:随机数生成和数组去重。 首先,我们来...
在C#中,实现n个数的全排列可以通过回溯算法或者递归的方式来完成。下面我们将深入探讨这个问题。 首先,全排列是指从n个不同元素中取出m个元素(m≤n),按照一定的顺序排成一列的所有排列方式。对于n个不同的数字...