最后更新

二刷

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. STL学习一:标准模板库理论基础

    STL(Standard Template Library,标准模板库)是惠普实验室开发的一系列软件的统称.现然主要出现在C++中,但在被引入C++之前该技术就已经存在了很长的一段时间. STL的从广 ...

  2. nodejs小问题:express不是内部或外部命令(转载)

    安装express之后发现居然提示express不是内部或外部命令. 工具/原料 Node.js安装包 方法/步骤 1 首先下载Node.js安装包,此处我用的是官方最新的v0.10.27 32位版: ...

  3. LintCode-Fast Power

    Calculate the an % b where a, b and n are all 32bit integers. Example For 231 % 3 = 2 For 1001000 % ...

  4. Team Homework #3

    我们组采访了以下几组学长学姐.因为隐私问题我们不会写出他们的个人信息. 1:平均每周所花时间:10:平均写的代码总数:2000:最有用的部分:锻炼团队合作精神:最没用的部分:写博客:改进:完全不需要博 ...

  5. 一个inline-block的样式。

    <span style="height: 31px; font-family: 宋体; font-weight: bold; color: rgb(160, 64, 0); text- ...

  6. 【BZOJ】【1529】 【POI2005】ska Piggy banks

    本来以为是tarjan缩点……但是64MB的空间根本不足以存下原图和缩点后的新图.所以呢……并查集= = orz hzwer MLE的tarjan: /************************ ...

  7. Matlab中find函数的使用

    一.问题来源 看到了 min_score_pos = find(A0_scores==min(A0_scores), 1); [r,c] = find(X,k),返回X中第k个非零元素的行列位置. 二 ...

  8. 在线最优化求解(Online Optimization)之二:截断梯度法(TG)

    在线最优化求解(Online Optimization)之二:截断梯度法(TG) 在预备篇中我们做了一些热身,并且介绍了L1正则化在Online模式下也不能产生较好的稀疏性,而稀疏性对于高维特征向量以 ...

  9. Oracle 临时事务表 全局临时表_global temporary table

    所有的操作都在一个事务里,事务提交后,此表清空,特别适合做插入删除频率特别高的临时表操作,比如插入完数据就开始查询,查询完就删掉等,用完就扔! 临时表分事务级临时表和会话级临时表. 事务级临时表只对当 ...

  10. hdu 2102 A计划(BFS,基础)

    题目 //要仔细写的BFS,着重对#穿越的处理哦: //花了几个小时终于把这道简单的BFS给弄好了,我果然还需要增加熟练度,需要再仔细一些: //代码有点乱,但我不想改了,,,,, #include& ...