for(int i=0;i<=nums1.length;i++) //nums1 { for(int j=0;j<= nums2.length;j++) //nums2 { if(j == 20) { i++; j = 0; } if(i == 20) { break; } if(nums1[i] == nums2[j]) { same[i] = nums1[i]; }
时间: 2023-06-12 13:06:08 浏览: 173
这段代码有一些问题,循环中没有对计数器进行自增操作,会导致死循环。另外,第一个循环条件应该是 i < nums1.length,第二个循环条件应该是 j < nums2.length。还有,当 j 等于 20 时,i 应该自增 1,而不是直接赋值。下面是修正后的代码:
```
for(int i=0; i<nums1.length; i++) {
for(int j=0; j<nums2.length; j++) {
if(j == 20) {
i++;
j = 0;
}
if(i == 20) {
break;
}
if(nums1[i] == nums2[j]) {
same[i] = nums1[i];
}
}
}
```
相关问题
class Solution { public List<List<Integer>> subsets(int[] nums) { List<List<Integer>> res = new ArrayList<List<Integer>>(); for (int i = 0; i < (1 << nums.length); i++) { List<Integer> sub = new ArrayList<Integer>(); for (int j = 0; j < nums.length; j++) if (((i >> j) & 1) == 1) sub.add(nums[j]); res.add(sub); } return res; } }
我可以回答这个问题。这是一个求给定数组的所有子集的算法,使用了位运算。具体实现是通过枚举所有可能的子集,将每个子集转换为二进制数,然后根据二进制数中的每一位来判断该子集是否包含对应的元素。最终将所有符合条件的子集加入到结果列表中返回。
for (int i = 0; i < (1 << nums.length); i++) 怎么理解
这段代码是在使用位运算来枚举 nums 数组的所有子集。其中 (1 << nums.length) 表示 2 的 nums.length 次方,也就是子集的个数。i 从 开始,每次加 1,直到枚举完所有子集。
阅读全文