Deque<Integer> levelList = new LinkedList<Integer>();List<Integer> levelList = new LinkedList<Integer>();两句代码的区别是?
时间: 2024-06-08 13:06:43 浏览: 147
这两句代码的区别在于声明的类型不同。第一句代码声明了一个 `Deque<Integer>` 类型的变量 `levelList`,第二句代码声明了一个 `List<Integer>` 类型的变量 `levelList`。
`Deque` 是一个双端队列,可以在队列的两端进行插入和删除操作。`LinkedList` 是 `Deque` 接口的一个实现类,因此 `Deque<Integer>` 表示一个整数类型的双端队列。使用 `Deque` 的好处是可以使用队列和栈的特性,例如可以在队列的头部和尾部插入或删除元素。
`List` 是一个有序的集合,可以按照元素的顺序访问和操作。`LinkedList` 也是 `List` 接口的一个实现类,因此 `List<Integer>` 表示一个整数类型的有序集合。使用 `List` 的好处是可以通过索引访问元素,并且支持插入和删除操作。
所以,第一句代码声明了一个双端队列,而第二句代码声明了一个有序集合。根据具体的需求,选择使用不同的类型来存储和操作数据。
相关问题
改写成python语言import java.util.LinkedList; import java.util.List; import java.util.Scanner; public class Main { private static final int N = 1000 + 10; private static int[] get_cost(){ int[] cost = new int[N]; boolean[] vis = new boolean[N]; for(int i=1;i<N;i++){ cost[i] = -1; vis[i] = false; } LinkedList<Integer> que = new LinkedList<>(); que.addLast(1); cost[1] = 0; vis[1] = true; while(!que.isEmpty()){ int cur = que.pollFirst(); for(int i=1;i<=cur;i++){ int nxt = cur + cur / i; if(nxt >= N){ continue; } if(vis[nxt]){ continue; } vis[nxt] = true; cost[nxt] = cost[cur] + 1; que.addLast(nxt); } } return cost; } public static void main(String[] args) { int[] cost = get_cost(); int[] b = new int[N]; int[] c = new int[N]; int[] w = new int[N]; int[] dp = new int[12 * N]; Scanner scanner = new Scanner(System.in); int T = scanner.nextInt(); while (T > 0) { int n = scanner.nextInt(); int k = scanner.nextInt(); for (int i = 1; i <= n; i++) { b[i] = scanner.nextInt(); } for (int i = 1; i <= n; i++) { c[i] = scanner.nextInt(); } for (int i = 1; i <= n; i++) { w[i] = cost[b[i]]; } int sum_w = 0; for (int i = 1; i <= n; i++) { sum_w += w[i]; } int sum_c = 0; for (int i = 1; i <= n; i++) { sum_c += c[i]; } if (k >= sum_w) { System.out.println(sum_c); } else { for (int i = 0; i <= k; i++) { dp[i] = 0; } for (int i = 1; i <= n; i++) { for (int j = k; j >= w[i]; j--) { int v = dp[j - w[i]] + c[i]; if (dp[j] < v) { dp[j] = v; } } } System.out.println(dp[k]); } T--; } } }
这是Java代码,可以使用Jython将其转换成Python代码,也可以手动将其改写成Python代码。以下是手动改写的Python代码:
```python
from collections import deque
N = 1010
def get_cost():
cost = [-1] * N
vis = [False] * N
que = deque([1])
cost[1] = 0
vis[1] = True
while que:
cur = que.popleft()
for i in range(1, cur+1):
nxt = cur + cur // i
if nxt >= N or vis[nxt]:
continue
vis[nxt] = True
cost[nxt] = cost[cur] + 1
que.append(nxt)
return cost
def main():
cost = get_cost()
dp = [0] * (12 * N)
T = int(input())
for _ in range(T):
n, k = map(int, input().split())
b = list(map(int, input().split()))
c = list(map(int, input().split()))
w = [cost[b[i]] for i in range(n)]
sum_w = sum(w)
sum_c = sum(c)
if k >= sum_w:
print(sum_c)
else:
for i in range(k+1):
dp[i] = 0
for i in range(n):
for j in range(k, w[i]-1, -1):
v = dp[j - w[i]] + c[i]
if dp[j] < v:
dp[j] = v
print(dp[k])
if __name__ == '__main__':
main()
```
阅读全文