• [程序员代码面试指南]数组和矩阵问题-未排序正数数组中累加和为给定值的最长子数组长度


    题目描述

    给定无序数组,每个值均为正数,再给定整数k。求arr中所有子数组中所有元素相加和为k的最长子数组长度。无则输出-1。
    例:
    输入 arr=[1,2,1,1,1],k=3
    输出 3

    解题思路 (时间复杂度O(N),空间复杂度O(1))

    维护指针l,r表示子数组区间。初始l=r=0,向右移动至r=arr.length结束。
    维护当前子数组和sum,及到当前为止满足题意的最大len。初始sum=arr[0],len=-1。
    每次比较sum和k,根据情况选择移动l还是r,并更新sum和len。

    代码

    public class Solution {
    	public int longestEqualStrLen(int[] arr,int k) {
    		int l=0;
    		int r=0;
    		int sum=arr[0];
    		int len=-1;	
    		while(r<arr.length) {
    			if(sum<k) {
    				r++;
    				if(r==arr.length) {
    					break;
    				}
    				sum+=arr[r];
    			}
    			else if(sum>k) {
    				l++;
    				sum-=arr[l];
    			}
    			else {
    				if(r-l+1>len) {
    					len=r-l+1;
    				}
    				l++;
    				sum=-arr[l];
    			}
    		}
    		return len;
    	}
    }
    
  • 相关阅读:
    PDO应用
    分页查询
    PHP去除数组中重复数据的两个例子
    数据库访问(现用基本格式)
    克隆、加载类
    抽象类和接口
    静态
    PHP基础
    数据库的常用函数
    数据库的高级查询
  • 原文地址:https://www.cnblogs.com/coding-gaga/p/10835790.html
Copyright © 2020-2023  润新知