【算法】喜欢算法的朋友,看下乘积最大数组如何写?

时间:2022-10-24 22:59:08

【算法】喜欢算法的朋友,看下乘积最大数组如何写?

算法题目描述

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] 不是子数组。

这道题留给大家来解答一下,评论区讨论哦