java编程:有数组int[] list=new int[] {11,0,20,30,40,50,55,0,9,0,4,0};请去除数组中的0。
时间: 2023-10-01 20:03:40 浏览: 29
可以使用双指针法,遍历数组,将非零元素按照顺序放到数组前面,同时记录非零元素的个数,最后将剩余的位置填充为0。
代码如下:
```java
int[] list = new int[] {11, 0, 20, 30, 40, 50, 55, 0, 9, 0, 4, 0};
int count = 0; // 非零元素个数
for (int i = 0, j = 0; i < list.length; i++) {
if (list[i] != 0) {
list[j++] = list[i];
count++;
}
}
// 填充剩余位置为0
for (int i = count; i < list.length; i++) {
list[i] = 0;
}
```
执行完上述代码后,数组list中的0已经被去除,变为{11, 20, 30, 40, 50, 55, 9, 4, 0, 0, 0, 0}。
相关问题
如何优化以下代码 lstID= list(lstID) n = len(lstID) if n == 0: new_intnumber=leftID + '0001' elif lstID[0] != leftID + '0001': new_intnumber = leftID + '0001' elif n == 1 and lstID[0] != leftID + '0001': new_intnumber = leftID + '0001' elif n == 1 and lstID[0] == leftID + '0001': new_intnumber = leftID + '0002' else: for i in range(n-1): print('i=',i) #i的取值范围是从0到n-2,即循环n-1次 if int(lstID[i])+1 == int(lstID[i+1]): break elif int(lstID[i])+1 != int(lstID[i+1]): print('lstID[i]的i=',i,lstID[i]) new_intnumber= int(lstID[i])+1 print('循环内=',new_intnumber) break new_intnumber= int(lstID[n-1])+1 print('最后一个数+1=',new_intnumber)
可以考虑如下优化:
1. 避免重复计算 len(lstID),可以在最开始将其保存到一个变量中。
2. 使用elif语句时,可以将条件判断语句合并。例如,将第3个和第4个elif语句合并为:
elif n == 1 and lstID[0] == leftID + '0001':
new_intnumber = leftID + '0002'
3. 可以将循环改为使用zip函数遍历相邻元素,避免使用下标。
4. 在for循环外面定义 new_intnumber 变量,并在循环中更新它,避免出现变量未定义的情况。
优化后的代码如下:
```
lstID = list(lstID)
n = len(lstID)
if n == 0:
new_intnumber = leftID + '0001'
elif lstID[0] != leftID + '0001':
new_intnumber = leftID + '0001'
elif n == 1 and lstID[0] == leftID + '0001':
new_intnumber = leftID + '0002'
else:
new_intnumber = None
for a, b in zip(lstID, lstID[1:]):
if int(a) + 1 != int(b):
new_intnumber = int(a) + 1
break
if new_intnumber is None:
new_intnumber = int(lstID[-1]) + 1
```
如何优化代码: lstID= list(lstID) n = len(lstID) if n == 0: new_intnumber=leftID + '0001' elif lstID[0] != leftID + '0001': new_intnumber = leftID + '0001' elif n == 1 and lstID[0] != leftID + '0001': new_intnumber = leftID + '0001' elif n == 1 and lstID[0] == leftID + '0001': new_intnumber = leftID + '0002' else: for i in range(n-1): print('i=',i) #i的取值范围是从0到n-2,即循环n-1次 if int(lstID[i])+1 == int(lstID[i+1]): break elif int(lstID[i])+1 != int(lstID[i+1]): print('lstID[i]的i=',i,lstID[i]) new_intnumber= int(lstID[i])+1 print('循环内=',new_intnumber) break new_intnumber= int(lstID[n-1])+1 print('最后一个数+1=',new_intnumber)
可以考虑以下几个方面来优化这段代码:
1. 避免重复计算len(lstID):可以在代码开始之前计算一次,然后在后续使用n的地方直接调用,避免多次计算。
2. 简化if语句:可以将多个if语句合并成一个,使用逻辑运算符and和or来判断多个条件。
3. 使用变量替换重复的表达式:可以将重复的表达式赋值给一个变量,然后在后续使用该变量的地方调用,避免重复计算。
4. 简化循环:可以使用Python内置的函数max()和min()来找到列表中的最大值和最小值,然后进行比较和计算。
下面是优化后的代码:
```
lstID = list(lstID)
n = len(lstID)
if n == 0:
new_intnumber = leftID + '0001'
elif lstID[0] != leftID + '0001' or (n == 1 and lstID[0] != leftID + '0001'):
new_intnumber = leftID + '0001'
elif n == 1 and lstID[0] == leftID + '0001':
new_intnumber = leftID + '0002'
else:
min_id = int(min(lstID))
max_id = int(max(lstID))
if min_id != int(leftID + '0001'):
new_intnumber = int(leftID + '0001')
elif max_id == min_id + n - 1:
new_intnumber = max_id + 1
else:
for i in range(n-1):
if int(lstID[i])+1 != int(lstID[i+1]):
new_intnumber = int(lstID[i])+1
break
else:
new_intnumber = int(lstID[n-1])+1
```
优化后的代码更简洁、易读,同时也减少了重复计算和循环次数,提高了代码的效率。
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)