给我出一道简单的Java算法题
时间: 2024-05-22 16:13:26 浏览: 8
好的,以下是一道简单的Java算法题:
给定一个整型数组,写一个方法来判断数组中是否存在数字 7,如果数组中存在数字 7,则返回 true,否则返回 false。
你可以用以下的 Java 代码来实现这个算法:
public static boolean containsSeven(int[] nums) {
for (int i = 0; i < nums.length; i++) {
if (nums[i] == 7) {
return true;
}
}
return false;
}
使用这个方法可以判断一个数组中是否存在数字 7,如果存在则返回 true,否则返回 false。
相关问题
可以帮我出一道简单的算法题吗
当然可以,以下是一道简单的算法题:
题目描述:
给定一个整数数组nums,找到两个数之和等于给定目标值target的下标。假设每个输入只有一个答案,并且不可以使用同一个元素两次。
示例:
输入:nums = [2, 7, 11, 15], target = 9
输出:[0, 1]
解释:nums[0] + nums[1] = 2 + 7 = 9,因此返回[0, 1]
提示:
- 你可以假设每个输入都只有一个答案。
- 数组中的元素是唯一的。
- 你可以按任意顺序返回答案。
题目解析:
这道题可以使用哈希表来解决。我们可以遍历整个数组,对于每个元素,查找目标值与当前元素的差值是否在哈希表中。如果在哈希表中,说明找到了两个数之和等于目标值的下标;否则,将当前元素的值和下标存入哈希表。
以下是Java的代码实现:
```java
public int[] twoSum(int[] nums, int target) {
Map<Integer, Integer> map = new HashMap<>();
for (int i = 0; i < nums.length; i++) {
int complement = target - nums[i];
if (map.containsKey(complement)) {
return new int[] { map.get(complement), i };
}
map.put(nums[i], i);
}
throw new IllegalArgumentException("No two sum solution");
}
```
在这个实现中,我们使用了一个哈希表来存储数组元素的值和下标。在遍历数组时,对于每个元素,我们计算目标值与当前元素的差值,并在哈希表中查找该差值的下标是否存在。如果存在,说明找到了两个数之和等于目标值的下标;否则,将当前元素的值和下标存入哈希表。如果最终没有找到解决方案,则抛出异常。
使用归并排序出一道Java算法题 包含答案
### 回答1:
归并排序算法题:
给定一个整数数组 nums ,将该数组升序排列。答案:
public static void mergeSort(int[] nums) {
if (nums == null || nums.length == 0) {
return;
}
int[] helper = new int[nums.length];
mergeSort(nums, helper, 0, nums.length - 1);
}
private static void mergeSort(int[] nums, int[] helper, int low, int high) {
if (low < high) {
int middle = low + (high - low) / 2;
mergeSort(nums, helper, low, middle);
mergeSort(nums, helper, middle + 1, high);
merge(nums, helper, low, middle, high);
}
}
private static void merge(int[] nums, int[] helper, int low, int middle, int high) {
for (int i = low; i <= high; i++) {
helper[i] = nums[i];
}
int left = low;
int right = middle + 1;
int curr = low;
while (left <= middle && right <= high) {
if (helper[left] <= helper[right]) {
nums[curr++] = helper[left++];
} else {
nums[curr++] = helper[right++];
}
}
int remain = middle - left;
for (int i = 0; i <= remain; i++) {
nums[curr + i] = helper[left + i];
}
}
### 回答2:
题目:给定一个整数数组arr,以及两个整数left和right。请编写一个方法,返回数组中满足left <= i <= j <= right的子数组的最大和。
要求实现以下方法:
```java
public static int maxSubArray(int[] arr, int left, int right) {
// 实现归并排序算法
}
public static void main(String[] args) {
int[] arr = {1, -2, 3, 10, -4, 7, 2, -5};
int left = 2;
int right = 5;
int result = maxSubArray(arr, left, right);
System.out.println("最大和为:" + result);
}
```
答案:
```java
public static int maxSubArray(int[] arr, int left, int right) {
if (left == right) {
return arr[left];
}
int mid = (left + right) / 2;
int maxLeftSum = maxSubArray(arr, left, mid); // 左半部分的最大子数组和
int maxRightSum = maxSubArray(arr, mid + 1, right); // 右半部分的最大子数组和
// 计算横跨左右两个部分的最大子数组和
int maxCrossSum = crossSum(arr, left, right, mid);
// 返回三者中的最大值
return Math.max(maxLeftSum, Math.max(maxRightSum, maxCrossSum));
}
private static int crossSum(int[] arr, int left, int right, int mid) {
// 左半部分的最大子数组和
int leftSum = Integer.MIN_VALUE;
int sum = 0;
// 从中心向左计算
for (int i = mid; i >= left; i--) {
sum += arr[i];
leftSum = Math.max(leftSum, sum);
}
// 右半部分的最大子数组和
int rightSum = Integer.MIN_VALUE;
sum = 0;
// 从中心向右计算
for (int i = mid + 1; i <= right; i++) {
sum += arr[i];
rightSum = Math.max(rightSum, sum);
}
// 返回左右最大子数组和的和
return leftSum + rightSum;
}
public static void main(String[] args) {
int[] arr = {1, -2, 3, 10, -4, 7, 2, -5};
int left = 2;
int right = 5;
int result = maxSubArray(arr, left, right);
System.out.println("最大和为:" + result);
}
```
解析:这道题是一道使用归并排序的算法题,通过分治的思想将数组分为左右两个部分,分别找到左右两个部分的最大和,再计算横跨左右两个部分的最大子数组和。最后返回三者中的最大值即为所求的结果。具体的解题思路在代码的注释中有详细解释。执行上述代码,可以得到最大和为18的结果。
### 回答3:
题目:给定一个整数数组,使用归并排序算法对数组进行升序排序。
解答:
以下是使用归并排序对整数数组进行升序排序的Java算法实现:
```java
public class MergeSort {
// 归并排序主函数
public static void mergeSort(int[] nums) {
if (nums == null || nums.length <= 1) {
return;
}
int[] aux = new int[nums.length]; // 辅助数组
mergeSort(nums, aux, 0, nums.length - 1);
}
// 归并排序递归函数
private static void mergeSort(int[] nums, int[] aux, int start, int end) {
if (start >= end) {
return;
}
int mid = start + (end - start) / 2;
mergeSort(nums, aux, start, mid); // 左半部分递归排序
mergeSort(nums, aux, mid + 1, end); // 右半部分递归排序
merge(nums, aux, start, mid, end); // 合并两个有序子数组
}
// 合并两个有序子数组
private static void merge(int[] nums, int[] aux, int start, int mid, int end) {
for (int k = start; k <= end; k++) {
aux[k] = nums[k];
}
int i = start, j = mid + 1;
for (int k = start; k <= end; k++) {
if (i > mid) {
nums[k] = aux[j++];
} else if (j > end) {
nums[k] = aux[i++];
} else if (aux[i] <= aux[j]) {
nums[k] = aux[i++];
} else {
nums[k] = aux[j++];
}
}
}
// 测试
public static void main(String[] args) {
int[] nums = {5, 2, 8, 3, 1, 9, 4};
mergeSort(nums);
System.out.println("排序结果:" + Arrays.toString(nums));
}
}
```
答案就是使用归并排序算法实现对给定整数数组的升序排序。调用`mergeSort`函数即可实现排序,示例程序中给出了一个测试用例。
输出结果为:[1, 2, 3, 4, 5, 8, 9]。
相关推荐
![java](https://img-home.csdnimg.cn/images/20210720083646.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_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)