最后更新

二刷

11-Jan-2017

看看给的范围可以重复多少次某个句子。

还是用的第一次的做法,统计2个东西。

1)以某一个单词为一行的第一个单词,那么这一行可以重复多少次整个句子。

2)以某一个单词为一行的第一个单词,那么下一行该由哪个单词开始。

repeatTimes[i] 表示以句子中的第i个单词为开始,句子可以重复多烧瓷。

nextStart[i]表示,下一行的第一个是句子中的哪一个单词。

Time Complexity:

单词个数:N

一开始计算2个array是 O(N * Cols)

后面填充计算总数是O(rows)

所以总共 O(N * cols + rows)

Space:

O(N)

public class Solution {
public int wordsTyping(String[] sentence, int rows, int cols) {
if (sentence.length == 0) return 0;
int length = sentence.length;
int[] repeatTimes = new int[length];
int[] nextStart = new int[length]; for (int i = 0; i < length; i++) {
String tempStr = sentence[i];
int count = 0;
int j = i;
int tempLength = tempStr.length() + 1;
while (tempLength - 1 <= cols) { if (++j == length) {
count ++;
j = 0;
}
tempLength += sentence[j].length() + 1;
}
repeatTimes[i] = count;
nextStart[i] = j;
} int res = 0;
int startWordIndex = 0;
for (int i = 0; i < rows; i++) {
res += repeatTimes[startWordIndex];
startWordIndex = nextStart[startWordIndex];
}
return res;
}
}

一刷

10-Oct-2016

首先想到的是直接做,然后TLE。

public class Solution {
public int wordsTyping(String[] sentence, int rows, int cols)
{
int m = sentence.length;
int res = 0;
int c = 0;
int left = cols;
for(int i = 0; i < rows;)
{
if(sentence[c%m].length() <= left)
{
if(c%m == m-1) res++;
c++;
left = left - sentence[(c-1)%m].length() - 1; }
else
{
i++;
left = cols;
}
} return res; }
}

上面这个在某些TEST CASE的时候发现,其实是有循环出现的,比如

["f","p","a"]

8

7

每3行FPA会出现4次,第四行开始又是重新一边,这样可以直接按3的倍数跳到最后。但是需要注意的是循环的开始不一定就是第一行:

["I", "had", "apple", "pie"]

4

5

循环节是:

apple

pie-I

had--

不是从I开始。

所以要记住开始循环的位置。。

主要说一下DISCUSS里的另一种方法。

整个句子,理论上说每一个单词都有可能作为某一行的开头,我们要计算一下如果以某个单词开头,会是什么结果。结果包括两部分:

1)这一行能塞多少个句子。

2)下一行开头会以什么单词开头。

知道这2个情况之后,以此塞满所有ROWS就行了。

(https://discuss.leetcode.com/topic/62364/java-optimized-solution-17ms)

public class Solution {
public int wordsTyping(String[] sentence, int rows, int cols)
{
int[] times = new int[sentence.length];
int[] nextOne = new int[sentence.length]; for(int i = 0; i < sentence.length; i++)
{
int index = i;
int curLength = 0;
int time = 0;
while(cols >= sentence[index].length() + curLength)
{
curLength += sentence[index].length()+1;
index++;
if(index == sentence.length)
{
index = 0;
time++;
}
} times[i] = time;
nextOne[i] = index;
} int res = 0;
int next = 0;
for(int i = 0; i < rows;i++)
{
res += times[next];
next = nextOne[next];
} return res;
/*
["a","b","e"]
20000
20000
["a", "bcd", "e"]
3
6
["I", "had", "apple", "pie"]
4
5
["a"]
20000
20000
["f","p","a"]
8
7
["try","to","be","better"]
10000
9001
*/ }
}

418. Sentence Screen Fitting的更多相关文章

  1. [LeetCode] Sentence Screen Fitting 调整屏幕上的句子

    Given a rows x cols screen and a sentence represented by a list of words, find how many times the gi ...

  2. Leetcode: Sentence Screen Fitting

    Given a rows x cols screen and a sentence represented by a list of words, find how many times the gi ...

  3. Sentence Screen Fitting

    Given a rows x cols screen and a sentence represented by a list of words, find how many times the gi ...

  4. LeetCode All in One 题目讲解汇总(持续更新中...)

    终于将LeetCode的免费题刷完了,真是漫长的第一遍啊,估计很多题都忘的差不多了,这次开个题目汇总贴,并附上每道题目的解题连接,方便之后查阅吧~ 477 Total Hamming Distance ...

  5. LeetCode All in One题解汇总(持续更新中...)

    突然很想刷刷题,LeetCode是一个不错的选择,忽略了输入输出,更好的突出了算法,省去了不少时间. dalao们发现了任何错误,或是代码无法通过,或是有更好的解法,或是有任何疑问和建议的话,可以在对 ...

  6. All LeetCode Questions List 题目汇总

    All LeetCode Questions List(Part of Answers, still updating) 题目汇总及部分答案(持续更新中) Leetcode problems clas ...

  7. Leetcode problems classified by company 题目按公司分类(Last updated: October 2, 2017)

    All LeetCode Questions List 题目汇总 Sorted by frequency of problems that appear in real interviews. Las ...

  8. LeetCode All in One 题目讲解汇总(转...)

    终于将LeetCode的免费题刷完了,真是漫长的第一遍啊,估计很多题都忘的差不多了,这次开个题目汇总贴,并附上每道题目的解题连接,方便之后查阅吧~ 如果各位看官们,大神们发现了任何错误,或是代码无法通 ...

  9. 断电不断网——Linux的screen

    title: 断电不断网--Linux的screen author:青南 date: 2015-01-01 20:20:23 categories: [Linux] tags: [linux,scre ...

随机推荐

  1. 包装设计模式的实现以改进BufferedReader中的readLine方法为例

    实现与目标对象相同的接口     BufferedReader 定义一个变量记住目标对象 定义一个构造器接收被增强对象 覆盖需要增强的方法 对于不想增强的方法,直接调用目标对象的方法. package ...

  2. 从一个新手容易混淆的例子简单分析C语言中函数调用过程

    某天,王尼玛写了段C程序: #include <stdio.h> void input() { int i; ]; ; i < ; i++) { array[i] = i; } } ...

  3. 学习KnockOut第二篇之Counter

                                                                        学习KnockOut第二篇之Counter        欲看此 ...

  4. adb shell 出现 error :

    首先,确保 adb 服务有起来    adb kill-server adb start-server其次,确保 adb devices 可以找到设备

  5. html+css学习笔记 2[标签]

    img标签/a标签 <img src="图片地址" alt="图片名"/>  图片(单标签)alt属性 是图片名字,是给百度搜索引擎抓取使用:    ...

  6. We Recommend a Singular Value Decomposition

    We Recommend a Singular Value Decomposition Introduction The topic of this article, the singular val ...

  7. 并行编译加快 VS C++ 项目的编译速度

    最近编译的项目都比较大,话说自己的电脑配置还行,但编译所花的时间还是很长,遇到需要重新编译整个项目的时候真的有回宿舍睡一觉的冲动.昨天一不小心被我发现了一款软件Xoreax IncrediBuild ...

  8. jsp自定义标签分析

    jsp自定义标签的优势体现在于jsp页面上面减少了java代码. jsp自定义标签有三大部分组成,首先是类继承TagSupport,实现doStartTag方法. public int doStart ...

  9. javascript背景淡入淡出

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...

  10. Android中自定义Checkbox

    custom_checkbox.xml文件: <?xml version="1.0" encoding="utf-8"?> <selector ...