最后更新

二刷

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. PHP中如何获取多个checkbox的值

    > > > weeks后的中括号不可漏,否则用PHP获取的时候只能取到最后一个值.之后PHP就很好处理了,如下: PHP获取checkbox值方法一: $weeks = $_POST ...

  2. 精灵的属性Zorder的设置

    1.Zorder是CCSprite从父类CCNode那继承来的protected属性: class CCNode{ protected: int m_nZOrder;                  ...

  3. WPF 多线程处理(6)

    WPF 多线程处理(1) WPF 多线程处理(2) WPF 多线程处理(3) WPF 多线程处理(4) WPF 多线程处理(5) WPF 多线程处理(6) 以下是子窗体的UI: <Window ...

  4. Django 学习笔记之五 Django中数据库中ManyToManyField及ForeignKey

    1.model里面的代码: from __future__ import unicode_literalsimport django.utils.timezone as timezonefrom dj ...

  5. Roy Li的学习和成长自传

    我不知道自己是什么时候从哪里来到这个世界上的,也许是石头里蹦出来的,也许是女娲捏出来的,上帝造出来的.上溯到我记忆的最前端,抱着我的好象 是一个女人,穿着白衣服,白得象石灰一样的那种.以至于后来我被告 ...

  6. WPF 显示初始化界面

    今天在看<WPF编程宝典>时,看到了Application类,该类可以做很多事情,我认为比较实用的是显示初始化界面,因为之前有个项目在打开的时候要加载好多dll,非常耗时,让客户等的蛋疼, ...

  7. 在javascript中检查一个值是否为integer

    integer 类型在javascript中很奇怪.ECMAScript技术规格说明书中,它是以概念的形式存在.number类型包括浮点型(floating )和整形(integer )不包括小数(详 ...

  8. FreePlan Windows下默认乱码解决方案

    FreePlan 做为一个开源的跨平台的思维导图软件非常好用. 笔者最近在Windows下使用时发现,新建导图文件时默认总是乱码,每次新建元素都需要手动设置一下字体才行. 研究一下,估计是默认模板问题 ...

  9. String类的使用 Part1

    String类的属性 1:Chars属性 获取当前 String 对象中位于指定位置的 Char 对象. 2:Length属性 获取当前 String 对象中的字符数. eg:获取字符串中  字母, ...

  10. Robot framework+python安装使用图解版

    一.安装包 1.Python2.7(一切的基础,切记安装目录不能有中文不能有空格) 1)python2.7:(python环境):python-2.7.msi 2)setuptools(python包 ...