• 几个数组相关常见算法题


    题目一

    给定一个正整数组成的无序数组arr,

    给定一个正整数值k 找到arr的所有子数组里,

    哪个子数组的累加和等于k,并且是长度最大的返回其长度

    1. public static int getMaxLength(int[] arr, int k) {
    2. int sum = 0;
    3. int R = 0;
    4. int max = 0;
    5. for (int L = 0; L < arr.length; L++) {
    6. while (R < arr.length && sum + arr[R] <= k) {
    7. sum += arr[R++];
    8. }
    9. if (sum == k) {
    10. max = Math.max(max, R - L);
    11. }
    12. if (L < R) {
    13. sum -= arr[L];
    14. } else {
    15. R++;
    16. }
    17. }
    18. return max;
    19. }

    题目二

    给定一个整数组成的无序数组arr,

    给定一个整数值k 找到arr的所有子数组里,

    哪个子数组的累加和等于k,并且是长度最大的返回其长度

    可以看到,这题与上一题的区别就在于数组中元素和 k 不再只是正整数

    1. public static int getMaxLength(int[] arr, int k) {
    2. HashMap map = new HashMap<>();
    3. map.put(0, -1);
    4. int preSum = 0;
    5. int max = 0;
    6. for (int i = 0; i < arr.length; i++) {
    7. preSum += arr[i];
    8. if (map.containsKey(preSum - k)) {
    9. max = Math.max(max, i - map.get(preSum - k));
    10. }
    11. if (!map.containsKey(preSum)) {
    12. map.put(preSum, i);
    13. }
    14. }
    15. return max;
    16. }

    题目三

    给定一个整数组成的无序数组arr,值可能正、可能负、可能0

    给定一个整数值K 找到arr的所有子数组里,

    哪个子数组的累加和<=K,并且是长度最大的 返回其长度

    这题和上一题的却别就在于子数组累加和不再是等于,而是 <= k

    1. public static int getMaxLength(int[] arr, int k) {
    2. int N = arr.length;
    3. int[] minSum = new int[N];
    4. int[] minSumEnd = new int[N];
    5. minSum[N - 1] = arr[N - 1];
    6. minSumEnd[N - 1] = N - 1;
    7. for (int i = N - 2; i >= 0; i--) {
    8. if (minSum[i + 1] <= 0) {
    9. minSum[i] = arr[i] + minSum[i + 1];
    10. minSumEnd[i] = minSumEnd[i + 1];
    11. } else {
    12. minSum[i] = arr[i];
    13. minSumEnd[i] = i;
    14. }
    15. }
    16. int R = 0;
    17. int max = 0;
    18. int sum = 0;
    19. for (int L = 0; L < N; L++) {
    20. while (R < N && sum + minSum[R] <= k) {
    21. sum += minSum[R];
    22. R = minSumEnd[R] + 1;
    23. }
    24. max = Math.max(max, R - L);
    25. if (L < R) {
    26. sum -= arr[L];
    27. } else {
    28. R++;
    29. }
    30. }
    31. return max;
    32. }

     

     

  • 相关阅读:
    Go Mac配置Air热加载
    15、Python -- 阶段总结:变量与流程控制
    11.物联网lwip,网卡原理
    VUE 组件
    大数据Apache Druid(七):Druid数据的全量更新
    flex布局与float布局
    洛谷P1024 [NOIP2001 提高组] 一元三次方程求解(优雅的暴力+二分,干净利落)
    Aptitude - Debian GNULinux 软件包管理工具
    秋招进行中~让我们一起复习一下数据结构基础(文章有点长~持续更新中)
    RabbitMQ常见的应用问题
  • 原文地址:https://blog.csdn.net/qq_61557294/article/details/126703933