1078. 数组的度

1078. 数组的度

 
给定由非负整数组成的非空数组,数组的度定义为出现频率最高的元素。
找出最短的连续子数组,并使得它和原数组有相同的度。返回该连续子数组的长度。

样例

样例 1:
输入: [2, 2]
输出: 2
样例 2:
输入: [1, 2, 2, 3, 1]
输出: 2
解释:
输入数组的度是2,1和2都出现了两次。
具有相同度的子串包括:
[1, 2, 2, 3, 1], [1, 2, 2, 3], [2, 2, 3, 1], [1, 2, 2], [2, 2, 3], [2, 2]
其中长度最短为2。所以返回2。

注意事项

 

nums.length的范围在1到50,000之间。
nums[i]是范围为0到49,999的整数。
public class Solution {
    /**
     * @param nums: a list of integers
     * @return: return a integer
     */
    public int findShortestSubArray(int[] nums) {
        // write your code here
          int min = 0;
            HashMap<Integer, Interval> hashMap = new HashMap<>();
            for (int i = 0; i < nums.length; i++) {
                if (hashMap.containsKey(nums[i])) {
                    Interval temp = hashMap.get(nums[i]);
                    temp.end = i - temp.start;
                    temp.sum++;
                    hashMap.put(nums[i], temp);
                } else {
                    hashMap.put(nums[i], new Interval(i, 1));
                }
            }
            int max = 0;
            for (Interval t : hashMap.values()) {
                // System.out.println(t.sum+","+t.end);
                if (t.sum > max) {
                    max = t.sum;
                    min = t.end;
                }else  if (t.sum == max) {
                    min = Math.min(min,t.end);
                }
            }
            return min+1;
    }
    
     //      Definition of Interval:
    public class Interval {
        int start, end, sum;
 
 
        Interval(int start, int sum) {
            this.start = start;
            this.sum = sum;
        }
    }
}
 
用户界面: 1. 数组输入:请输入数组的长:(用户输入长) 请输入数组元素:(用户输入元素,以空格分隔) 数组输入成功! 2. 数组排序:请选择排序方式: 1. 升序排序 2. 降序排序 (用户选择排序方式) 排序成功! 3. 元素插入:请输入要插入的元素:(用户输入元素) 请输入要插入的位置:(用户输入位置) 插入成功! 4. 元素查找:请输入要查找的元素:(用户输入元素元素查找成功!该元素数组中的位置为:(输出位置) 5. 元素删除:请输入要删除的元素:(用户输入元素元素删除成功! 6. 数组输出:数组元素为:(输出数组元素) 7. 输出指位置元素:请输入要查询的位置:(用户输入位置) 该位置的元素为:(输出元素) 8. 对指个数的数组元素求和:请输入要求和的个数:(用户输入个数) 数组元素求和为:(输出求和结果) 9. 实验报告: 本次实验设计了一个整型数组操作库,实现了数组输入、数组排序、元素插入、元素查找、元素删除、数组输出、输出指位置元素、对指个数的数组元素求和等功能。 在用户界面中,用户可以输入数组的长元素,进行数组的初始化;也可以选择升序或降序排序方式,进行数组排序;可以插入元素,查找元素,删除元素;输出数组元素和指位置的元素;求和指个数的数组元素。 实验中,我们使用了冒泡排序算法进行数组排序,使用了数组下标进行元素插入和删除操作。同时,我们对用户的输入进行了合法性判断,保证了程序的稳性和正确性。 本次实验让我对数组操作有了更深入的理解,也锻炼了我的编程能力和问题解决能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

时代我西

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值