怎样优化此代码?
实现的功能:long a[nElems]为空返回-1,否则返回最大值,并删除此值。
目前用了三个FOR语句,怎样优化下? public long removemax()
{
long b =0;
int i;
if(nElems==0)
return -1;
else {
for (i=0;i<nElems;i++)
if(b<a[i])
b=a[i];
for (i=0;i<nElems;i++)
if (b==a[i])
break;
for (;i<nElems;i++)
a[i]=a[i+1];
nElems--;
return b;
}
}
实现的功能:long a[nElems]为空返回-1,否则返回最大值,并删除此值。
目前用了三个FOR语句,怎样优化下? public long removemax()
{
long b =0;
int i;
if(nElems==0)
return -1;
else {
for (i=0;i<nElems;i++)
if(b<a[i])
b=a[i];
for (i=0;i<nElems;i++)
if (b==a[i])
break;
for (;i<nElems;i++)
a[i]=a[i+1];
nElems--;
return b;
}
}
解决方案 »
- java JavaScript
- Exception in thread "main" java.lang.NullPointerException求大牛帮忙解决,30行小程序
- 枚举?
- 用whilehe 和 switch来实现一个菜单的程序请各位 帮忙看看 !
- 获取命令行输入的小问题,,,在线等,多谢
- 利用Java。在局域网中,怎样得到IP地址A转发给网关的数据包,然后又将网关发给IP地址A的数据传回?
- 怎么去掉*.bat文件的那个DOS框!
- 求救!!输入一个字符串"abcd",输出它所有可能组合的情况!
- 初学者的一个关于【JAR】的问题,不吝赐教.....
- 请教一个关于API的问题,解决送500分
- TIFF格式图像读取
- 关于日期的
public int removemax(int[] array)
{
if(array.length<=0)
{
return -1;
}
else
{
int max=array[0];
int temp=0;
for(int i=1;i<array.length;i++)
{
if(max<array[i])
{
max=array[i];
temp=i;
}
}
//在这里根据temp 往前移位,移位注意数组最后一个数字,尤其最大值是最后一个
return max;
}
}
{
long b =a[0];
int i,c=0;
if(nElems==0)
return -1;
else {
for (i=0;i<nElems;i++)
{if(b<a[i])
{b=a[i];
c=i;}
}
for (;c<nElems;c++)
a[c]=a[c+1];
nElems--;
return b;
}
}
public static int removeMax(int[] values) {
if (values.length <= 0) {
return -1;
} else {
int temp = 0;
for (int i = 0; i < values.length; i++) {
if (values[temp] < values[i]) {
temp = i;
}
}
// 下边把最大值和数组最后一个值换掉。
values[temp] ^= values[values.length - 1];
values[values.length - 1] ^= values[temp];
values[temp] ^= values[values.length - 1]; return values[values.length - 1];
} }LZ 只能把最大值给换数组最后边了
JAVA里没有返回2个值的机制,也没法引用传递
可以再再外边处理那最个最大的值,因为已经知道在数组最后了
这是数组中的元素删除,又不是链表之类的,删除一个元素必须for一次
但如果是有序数组可能还是要用FOR了。
String number = "000000";
String id = "310141597210452232";
String all = id + number;
byte[] messages = all.getBytes();
for (int i = 0; i < messages.length; i++) {
System.out.println(messages[i]);
}
byte[][] strArray = new byte[3][messages.length / 3];
if (messages.length % 3 == 0) {
for (int i = 0; i < 3; i++) {
strArray[i] = new String(messages, i * messages.length / 3, 8)
.getBytes();
}
}
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 8; j++) {
System.out.print(strArray[i][j]);
}
System.out.println();
}
}
就是 a = a ^ b;
是异或的意思 按位对比2数 相同为0,不同为1;