用java代码实现“给定一个整数数组,要求返回不在数组中的最小正整数”
时间: 2023-06-10 19:03:15 浏览: 59
好的,我可以为您提供示例代码,以下是使用Java实现该功能的代码:
```java
public int findMissingPositive(int[] nums) {
int n = nums.length;
for (int i = 0; i < n; i++) {
// 将元素放到正确的位置上
while (nums[i] > 0 && nums[i] <= n && nums[nums[i] - 1] != nums[i]) {
int tmp = nums[nums[i] - 1];
nums[nums[i] - 1] = nums[i];
nums[i] = tmp;
}
}
for (int i = 0; i < n; i++) {
if (nums[i] != i + 1) {
// 如果当前位置没有对应的数字,则返回当前位置加 1
return i + 1;
}
}
// 如果数组中的所有数字都存在,则返回 n+1
return n + 1;
}
```
在此Java代码示例中,我们首先遍历整个数组,将每个元素放到正确的位置上。然后再次遍历该数组以查找缺失的最小正整数。如果当前位置没有对应的数字,则返回该位置加1,如果数组中的所有数字都存在,则返回n + 1。
相关问题
java完成 给定一组正整数数组M,找出M数组中N项和为给定数S。如果有多对N项数字的和都等于 S,则输出N个数的乘积最小的哪一项,没有则返回空;
以下是Java的实现代码:
```java
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
int[] M = {1, 2, 3, 4, 5, 6};
int S = 10;
int N = 3;
int minProduct = findMinProduct(M, S, N);
if (minProduct == -1) {
System.out.println("没有找到符合条件的解");
} else {
System.out.println("乘积最小的一组解为:" + minProduct);
}
}
public static int findMinProduct(int[] M, int S, int N) {
Arrays.sort(M); // 排序
int i = 0, j = M.length - 1, minProduct = Integer.MAX_VALUE;
while (i < j) {
if (M[i] + M[j] == S) {
if (N == 2) {
minProduct = Math.min(minProduct, M[i] * M[j]);
i++;
j--;
} else {
// 递归查找剩余的N-2个数
int[] subM = Arrays.copyOfRange(M, i + 1, j);
int subMinProduct = findMinProduct(subM, S - M[i] - M[j], N - 2);
if (subMinProduct != -1) {
minProduct = Math.min(minProduct, M[i] * M[j] * subMinProduct);
}
i++;
}
} else if (M[i] + M[j] < S) {
i++;
} else {
j--;
}
}
return minProduct == Integer.MAX_VALUE ? -1 : minProduct;
}
}
```
其中,M是正整数数组,S是目标和,N是要求的项数。如果找到了一组解,则返回它们的乘积;否则返回-1。
给定 n 个正整数,编写一个java实验程序找出它们中出现次数最多的数。如果这样的数有多个,请输出其中最小的一个。
好的,以下是代码实现:
```java
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int[] nums = new int[n];
for (int i = 0; i < n; i++) {
nums[i] = scanner.nextInt();
}
Map<Integer, Integer> map = new HashMap<>();
int maxCount = 0;
int minNum = Integer.MAX_VALUE;
for (int num : nums) {
int count = map.getOrDefault(num, 0) + 1;
map.put(num, count);
if (count > maxCount || (count == maxCount && num < minNum)) {
maxCount = count;
minNum = num;
}
}
System.out.println(minNum);
}
}
```
代码思路:
1. 读入 n 个正整数,并存储到数组 nums 中。
2. 创建一个哈希表 map,用于记录每个数出现的次数。
3. 遍历 nums 数组,对于每个数 num,从 map 中获取它出现的次数 count,然后将其更新为 count + 1,并存回 map 中。
4. 如果 count 大于当前记录的最大出现次数 maxCount,或者 count 等于 maxCount 但 num 更小,则更新 maxCount 和 minNum。
5. 遍历完 nums 数组后,minNum 即为出现次数最多的数中的最小数,输出即可。
希望能够帮到你!