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));



    }
}

results matching ""

    No results matching ""