https://cheickismo.wordpress.com/2016/11/14/longest-phrases-in-a-tweet-twitter-coding-challenge/
Longest Phrases in A Tweet
一个queue,类似滑窗
import java.util.*;
public class Solution {
static int maxLength(int[] a, int k) {
int res=0;
Queue<Integer> queue = new LinkedList<>();
int window =0;
for(int i :a){
if(window+i<=k){
//less than the max length, then add into the window
queue.offer(i);
window+=i;
res= Math.max(res,queue.size());
}else{
while(window+i>k){
int tmp = queue.poll();
window-=tmp;
}
queue.offer(i);
window+=i;
res=Math.max(res,queue.size());
}
}
res=Math.max(res,queue.size());
return res;
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int length;
length = in.nextInt();
int [] a = new int [length];
for (int i=0;i<length;i++){
int tmp=in.nextInt();
a[i]=tmp;
}
int k = in.nextInt();
System.out.print(maxLength(a,k));
}
}
或者 双指针
import java.io.*;
import java.util.*;
import java.math.*;
public class Solution {
static int maxLength(int[] a, int k) {
int sum =0;
int j=0;
int i=0;
for (i=0;i<a.length;i++){
if(sum+a[i]<=k){
sum+=a[i];
res=Math.max(res,i-j+1);
}else{
while(sum+a[i]>k){
int tmp=a[j++];
sum-=tmp;
}
sum+=a[i];
res=Math.max(res,i-j+1);
}
}
res=Math.max(res,i-j+1);
return res;
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int length;
length = in.nextInt();
int [] a = new int [length];
for (int i=0;i<length;i++){
int tmp=in.nextInt();
a[i]=tmp;
}
int k = in.nextInt();
System.out.print(maxLength(a,k));
}
}