算法题目描述
1.数组排序,类型:图算法,简单。 2.下一个排列,类型:数组,双指针,中等难度。 3.乘积最大数组,类型,数组,中等难度。
第一道数组排序算法题目详细描述
编写一个JavaApplication程序,将随机生成的无序数组使用冒泡排序,将这个混乱的数组变成一个从小到大排列的有序的数组并输出。
java 解题代码参考如下
class demo_sort {
public static void main(String[] args) {
int[] numbers = new int[] { 1, 5, 8, 2, 3, 9, 4 };
for (int i = 0; i < numbers.length - 1; i++) {
for (int j = 0; j < numbers.length - 1 - i; j++) {
if (numbers[j] > numbers[j + 1]) {
int temp = numbers[j];
numbers[j] = numbers[j + 1];
numbers[j + 1] = temp;
}
}
}
System.out.println("从小到大排序后的结果是:");
for (int i = 0; i < numbers.length; i++)
System.out.print(numbers[i] + " ");
}
}
第二题下一个排列算法题目描述
实现获取 下一个排列 的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。 如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。 必须 原地修改也叫原地算法,只允许使用额外常数空间。 什么是原地算法呢? 在计算机科学中,一个原地算法(in-place algorithm)是一种使用小的,固定数量的额外之空间来转换资料的算法。当算法执行时,输入的资料通常会被要输出的部分覆盖掉。不是原地算法有时候称为非原地(not-in-place)或不得其所(out-of-place)
示例 1:
输入:nums = [1,2,3] 输出:[1,3,2]
示例 2:
输入:nums = [3,2,1] 输出:[1,2,3]
示例 3:
输入:nums = [1,1,5] 输出:[1,5,1]
示例 4:
输入:nums = [1] 输出:[1]
提示: 1 <= nums.length <= 100 0 <= nums[i] <= 100
java 解题代码参考如下
int i = nums.length - 1;
while (i > 0 && nums[i] <= nums[i - 1]) {
i--;
}
if (i > 0) {
int j = nums.length - 1;
while (j >= 0 && nums[j] <= nums[i - 1]) {
j--;
}
swap(nums, i - 1, j);
}
reverse(nums, i);
第三题下一个排列算法题目描述
给你一个整数数组 nums ,请你找出数组中乘积最大的连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。
示例 1:
输入: [2,3,-2,4] 输出: 6 解释: 子数组 [2,3] 有最大乘积 6。
示例 2:
输入: [-2,0,-1] 输出: 0 解释: 结果不能为 2, 因为 [-2,-1] 不是子数组。
这道题留给大家来解答一下,评论区讨论哦