牛客NC343 和大于等于K的最短子数组【困难 前缀和 Java/Go】

题目

题目链接:

https://www.nowcoder.com/practice/3e1fd3d19fb0479d94652d49c7e1ead1

思路

复制代码
本答案利用前缀和解答,Java,Go答案通过,但是同样的代码用PHP的话有一个测试用例超时
应该还有更优秀的答案,后面找到更优答案再更新博客

Java代码

java 复制代码
import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param nums int整型ArrayList
     * @param k int整型
     * @return int整型
     */
    public int shortestSubarray (ArrayList<Integer> nums, int k) {
        //前缀和
        int n = nums.size();
        int[] sum = new int[n + 1];
        for (int i = 0; i < n; i++) {
            sum[i + 1] = sum[i] + nums.get(i);
             sum[i + 1]%=1000000007;  //关键
            if (nums.get(i) == k) return 1;
        }

        int ans = 0x7fffffff;
        for (int i = 0; i <= n ; i++) {
            if (sum[i] >= k) {
                ans = Math.min(ans, i);
                for (int j = i ; j >= 0 ; j--) {
                    int diff = sum[i] - sum[j];
                    if (diff >= k) {
                        ans = Math.min(ans, i - j);
                        break;
                    }
                }
            }

        }
        if (ans == 0x7fffffff)
            return -1;

        return ans;
    }
}

Go代码

go 复制代码
package main

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 *
 * @param nums int整型一维数组
 * @param k int整型
 * @return int整型
 */
func shortestSubarray(nums []int, k int) int {
	//前缀和
	n := len(nums)
	ans := 0x7fffffff

	sum := make([]int, n+1)
	for i := 0; i < n; i++ {
		sum[i+1] = sum[i] + nums[i]
		if nums[i] == k {
			return 1
		}
	}

	for i := 0; i <= n; i++ {
		if sum[i] >= k { //剪枝
			if sum[i] >= k {
				if i < ans {
					ans = i
				}
			}
			for j := i; j >= 0; j-- {
				diff := sum[i] - sum[j]
				if diff >= k {
					if i-j < ans {
						ans = i - j
					}
					break
				}
			}
		}
	}

	if ans == 0x7fffffff {
		return -1
	}

	return ans
}
相关推荐
算法_小学生1 小时前
支持向量机(SVM)完整解析:原理 + 推导 + 核方法 + 实战
算法·机器学习·支持向量机
iamlujingtao1 小时前
js多边形算法:获取多边形中心点,且必定在多边形内部
javascript·算法
算法_小学生1 小时前
逻辑回归(Logistic Regression)详解:从原理到实战一站式掌握
算法·机器学习·逻辑回归
DebugKitty2 小时前
C语言14-指针4-二维数组传参、指针数组传参、viod*指针
c语言·开发语言·算法·指针传参·void指针·数组指针传参
qystca2 小时前
MC0241防火墙
算法
行然梦实5 小时前
粒子群优化算法(Particle Swarm Optimization, PSO) 求解二维 Rastrigin 函数最小值问题
算法·机器学习·数学建模
XH华5 小时前
C语言第六章函数递归
c语言·开发语言·算法
斯安5 小时前
LRU(Least Recently Used)原理及算法实现
算法
go54631584655 小时前
基于LSTM和GRU的上海空气质量预测研究
图像处理·人工智能·深度学习·神经网络·算法·gru·lstm
亮亮爱刷题5 小时前
算法提升之数论(矩阵+快速幂)
线性代数·算法·矩阵