博客
关于我
Leetcode 周赛单行键盘/连接棒材的最低费用题解
阅读量:233 次
发布时间:2019-03-01

本文共 1734 字,大约阅读时间需要 5 分钟。

059. 单行键盘

 显示英文描述 

我们定制了一款特殊的力扣键盘,所有的键都排列在一行上。

我们可以按从左到右的顺序,用一个长度为 26 的字符串 keyboard (索引从 0 开始,到 25 结束)来表示该键盘的键位布局。

现在需要测试这个键盘是否能够有效工作,那么我们就需要个机械手来测试这个键盘。

最初的时候,机械手位于左边起第一个键(也就是索引为 0 的键)的上方。当机械手移动到某一字符所在的键位时,就会在终端上输出该字符。

机械手从索引 i 移动到索引 j 所需要的时间是 |i - j|

当前测试需要你使用机械手输出指定的单词 word,请你编写一个函数来计算机械手输出该单词所需的时间。

 

示例 1:

输入:keyboard = "abcdefghijklmnopqrstuvwxyz", word = "cba"输出:4解释:机械手从 0 号键移动到 2 号键来输出 'c',又移动到 1 号键来输出 'b',接着移动到 0 号键来输出 'a'。总用时 = 2 + 1 + 1 = 4. 

示例 2:

输入:keyboard = "pqrstuvwxyzabcdefghijklmno", word = "leetcode"输出:73

 

提示:

  • keyboard.length == 26
  • keyboard 按某种特定顺序排列,并包含每个小写英文字母一次。
  • 1 <= word.length <= 10^4
  • word[i] 是一个小写英文字母

 

这种题就是简单的Hash题目,比较简单

class Solution {public:    int calculateTime(string keyboard, string word) {        int map[26]={0};        for(int i=0;i<keyboard.size();i++){            map[keyboard[i]-'a'] = i;        }        int res = 0;        int temp = 0;        for(auto w:word){            res+=abs(map[w-'a']-temp);            temp = map[w-'a'];        }        return res;    }};

 

5062. 连接棒材的最低费用

为了装修新房,你需要加工一些长度为正整数的棒材 sticks

如果要将长度分别为 X 和 Y 的两根棒材连接在一起,你需要支付 X + Y 的费用。 由于施工需要,你必须将所有棒材连接成一根。

返回你把所有棒材 sticks 连成一根所需要的最低费用。注意你可以任意选择棒材连接的顺序。

 

示例 1:

输入:sticks = [2,4,3]输出:14解释:先将 2 和 3 连接成 5,花费 5;再将 5 和 4 连接成 9;总花费为 14。

示例 2:

输入:sticks = [1,8,3,5]输出:30

这道题使用贪心的方法,每次取最小的两个数合并,使用最小堆,优先队列的方法实现。

class Solution {public:    int connectSticks(vector<int>& sticks) {        priority_queue<int,vector<int>, greater<int>> q;        for(auto stick:sticks){            q.push(stick);        }        int res = 0;        while(q.size()!=1){            int temp = q.top();            q.pop();            temp+=q.top();            q.pop();            res+=temp;            q.push(temp);        }        return res;    }};

 

转载地址:http://oolv.baihongyu.com/

你可能感兴趣的文章
MySQL 常见的 9 种优化方法
查看>>
MySQL 常见的开放性问题
查看>>
Mysql 常见错误
查看>>
MYSQL 幻读(Phantom Problem)不可重复读
查看>>
mysql 往字段后面加字符串
查看>>
mysql 快速自增假数据, 新增假数据,mysql自增假数据
查看>>
Mysql 报错 Field 'id' doesn't have a default value
查看>>
MySQL 报错:Duplicate entry 'xxx' for key 'UNIQ_XXXX'
查看>>
Mysql 拼接多个字段作为查询条件查询方法
查看>>
mysql 排序id_mysql如何按特定id排序
查看>>
Mysql 提示:Communication link failure
查看>>
mysql 插入是否成功_PDO mysql:如何知道插入是否成功
查看>>
Mysql 数据库InnoDB存储引擎中主要组件的刷新清理条件:脏页、RedoLog重做日志、Insert Buffer或ChangeBuffer、Undo Log
查看>>
mysql 数据库备份及ibdata1的瘦身
查看>>
MySQL 数据库备份种类以及常用备份工具汇总
查看>>
mysql 数据库存储引擎怎么选择?快来看看性能测试吧
查看>>
MySQL 数据库操作指南:学习如何使用 Python 进行增删改查操作
查看>>
MySQL 数据库的高可用性分析
查看>>
MySQL 数据库设计总结
查看>>
Mysql 数据库重置ID排序
查看>>