最后更新

二刷

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. Week1 Team Homework #3: 软件工程在北航

    在组内成员的共同努力,我们采访了几个学长学姐,顺利完成任务.反馈信息如下: 平均每周花在这门课上的时间 平均写的代码总行数 学到的最有用的部分 最没用的部分 <软件工程>最应该改进的地方 ...

  2. 适配iOS10以及Xcode8-b

    现在在苹果的官网上,我们已经可以下载到Xcode8的GM版本了,加上9.14日凌晨,苹果就要正式推出iOS10系统的推送了,在此之际,iOS10的适配已经迫在眉睫啦,不知道Xcode8 beat版本, ...

  3. eclipse不能创建java虚拟机-解决方法

    找到eclipse目录下的eclipse.ini,可以看到如下内容: -startup plugins/org.eclipse.equinox.launcher_1.1.0.v20100507.jar ...

  4. Asp.Net原理Version3.0_页面声明周期

    Asp.Net原理Version1.0 Asp.Net原理Version2.0                   相关源码 页面的Process方法 // System.Web.UI.Page pr ...

  5. 【BZOJ】【1029】【JSOI2007】建筑抢修

    贪心 按T2(完成时限)排序,然后从前往后依次枚举 如果sum+a[i].t1<=a[i].t2则加入 如果来不及修这个建筑: 如果当前这个建筑的维修时间t1比之前修过的建筑中耗时最长的耗时短, ...

  6. oracle 笔记

    1.Oracle认证,与其它数据库比较,安装 Oracle安装会自动的生成sys用户和system用户: (1)sys用户是超级用户,具有最高权限,具有sysdba角色,有create databas ...

  7. Unity3d修改FBX文件的动画名方法

    问题描述:FBX文件导入Unity3d后的动画名字一般都是 “Take 001”并且无法修改!如何修改它呢? 解决方法:解决方法其实很简单,只要你按照Unity3d的FBX文件命名规则,压根就不会存在 ...

  8. POJ2002Squares

    http://poj.org/problem?id=2002 题意 : 就是给你很多点的坐标,任取四个,看能组成多少个不同的正方形,相同的四个点,不同顺序构成的正方形视为同一正方形. 思路 : 就是一 ...

  9. JAVA WEB中如何让数据库连接对开发人员完全透明?

    书上的技术,确实开了眼界. 列相关测试代码如下,慢慢体会开发的模式. PropsUtil package org.smart4j.chapter2.util; import java.io.FileN ...

  10. linux入门教程(二) 图形界面还是命令窗口

    对于linux的应用,我想大多数都是用在服务器领域,对于服务器来讲真的没有必要跑一个图形界面.所以我们平时安装linux操作系统时往往是不安装图形界面的.说到这里也许你会有疑问,图形界面还能选择装或者 ...