剑指offer:45-48记录
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。
示例 1:
输入: [10,2]
输出: "102"
示例 2:
输入: [3,30,34,5,9]
输出: "3033459"
提示:
0 < nums.length <= 100
说明:
输出结果可能非常大,所以你需要返回一个字符串而不是整数
拼接起来的数字可能会有前导 0,最后结果不需要去掉前导 0
思路:贪心,具体证明略,其他文章写过。
class Solution {public String minNumber(int[] nums) {List<String> strList = new ArrayList<>();for (int num : nums) {strList.add(String.valueOf(num));}strList.sort((s1, s2) -> (s1 + s2).compareTo(s2 + s1));StringBuilder sb = new StringBuilder();for (String str : strList) {sb.append(str);}return sb.toString();}
}
给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 “a” ,1 翻译成 “b”,……,11 翻译成 “l”,……,25 翻译成 “z”。一个数字可能有多个翻译。请编程实现一个函数,用来计算一个数字有多少种不同的翻译方法。
示例 1:
输入: 12258
输出: 5
解释: 12258有5种不同的翻译,分别是"bccfi", "bwfi", "bczi", "mcfi"和"mzi"
字符串dp,看代码很容易看懂。
注意str.charAt(i - 2) != '0'必须加上,不加的例子:
class Solution {public int translateNum(int num) {String str = String.valueOf(num);int len = str.length();int[] dp = new int[len + 1];dp[0] = 1;for (int i = 1; i < len+1; ++i) {dp[i] += dp[i-1];if (i>1 && str.charAt(i - 2) != '0' && str.substring(i - 2, i).compareTo("25") < 1)dp[i] += dp[i - 2];}return dp[len];}
}
在一个 m*n 的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于 0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格、直到到达棋盘的右下角。给定一个棋盘及其上面的礼物的价值,请计算你最多能拿到多少价值的礼物?
示例 1:
输入:
[
[1,3,1],
[1,5,1],
[4,2,1]
]
输出: 12
解释: 路径 1→3→5→2→1 可以拿到最多价值的礼物
提示:
0 < grid.length <= 200
0 < grid[0].length <= 200
思路:经典dp,来一个超级标准的不压缩空间的一看就懂的写法吧。
class Solution {public int maxValue(int[][] grid) {if (grid.length == 0 )return 0 ;int[][] dp = new int[grid.length][grid[0].length] ;dp[0][0] = grid[0][0] ;for (int i=1 ; i<grid.length ; i++) {dp[i][0] = grid[i][0]+ dp[i-1][0] ;}for (int j=1 ; j<grid[0].length ; j++) {dp[0][j] = grid[0][j] + dp[0][j-1] ;}for (int i=1 ; i< grid.length ; i++) {for (int j=1 ; j < grid[0].length ; j++) {dp[i][j] = Math.max(dp[i-1][j],dp[i][j-1]) + grid[i][j] ;}}return dp[grid.length-1][grid[0].length-1] ;}
}
请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。
示例 1:
输入: "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
示例 2:
输入: "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
示例 3:
输入: "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。
提示:
s.length <= 40000
滑动窗口的维护五花八门:
for循环往右扩,左端点起辅助作用,保证窗口符合要求:
class Solution {public int lengthOfLongestSubstring(String s) {int res = 0;Set<Character> set = new HashSet<>();for(int l = 0, r = 0; r < s.length(); r++) {char c = s.charAt(r);while(set.contains(c)) {set.remove(s.charAt(l++));}set.add(c);res = Math.max(res, r - l + 1);}return res;}
}
剑指offer:45-48记录相关推荐
- 剑指offer做题记录
1. 剑指 Offer 03. 数组中重复的数字 力扣 class Solution { public:int findRepeatNumber(vector<int>& nu ...
- 【LeetCode】剑指 Offer 45. 把数组排成最小的数
[LeetCode]剑指 Offer 45. 把数组排成最小的数 文章目录 [LeetCode]剑指 Offer 45. 把数组排成最小的数 package offer;import java.uti ...
- 剑指offer刷题记录 python3 Java
剑指offer刷题记录 python3 Java 剑指 Offer 09. 用两个栈实现队列 剑指 Offer 10- I. 斐波那契数列 剑指 Offer 03. 数组中重复的数字 [★]剑指 Of ...
- 剑指Offer 刷题记录
文章目录 剑指offer题目 01. 二维数组中的查找 02. 替换空格 03. 从尾到头打印链表 04. 重建二叉树 05. 两个堆栈模拟一个队列 06. 旋转数组的最小数字 07. 斐波那契数列 ...
- 剑指offer刷题记录(上)
记录刷题过程,方便自己后期回顾 题目来自<剑指offer>,在牛客上OC,思路大多来自剑指offer,偶尔来自自己的碎碎念,代码自己瞎写的,如果有更优的方法请告诉我,谢谢大佬们 语言:py ...
- 剑指offer:63-66记录
假设把某股票的价格按照时间先后顺序存储在数组中,请问买卖该股票一次可能获得的最大利润是多少? 示例 1: 输入: [7,1,5,3,6,4] 输出: 5 解释: 在第 2 天(股票价格 = 1)的时候 ...
- 剑指offer:39-42记录
数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字. 你可以假设数组是非空的,并且给定的数组总是存在多数元素. 示例 1: 输入: [1, 2, 3, 2, 2, 2, 5, 4, 2] 输 ...
- 剑指offer:22-25记录
输入一个链表,输出该链表中倒数第k个节点.为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点.例如,一个链表有6个节点,从头节点开始,它们的值依次是1.2.3.4.5.6.这个链 ...
- string类函数和牛客网剑指offer刷题记录
1.strcat char* strcat(char *strDest,const char *strSrc){assert(strDest && strSrc);char *p = ...
- 剑指offer:50-53记录
在字符串 s 中找出第一个只出现一次的字符.如果没有,返回一个单空格. 示例: s = "abaccdeff" 返回 "b" s = "" ...
最新文章
- Why平台:Scalable是互联网公司的价值所在
- PicoBlaze性能
- 解析没有id的html,网络爬虫干货,还在用正则匹配html?专业的解析组件了解一下...
- C# ACCESS数据库操作类
- linux环境安装部署mark
- 霍金:AI或许能根除疾病和贫穷,但也可能摧毁人类 | GMIC 2017
- java实现在线浏览zip文件及文件下载
- 用Matlab实现字符串分割(split)
- linux 2G内存够用吗,不管2G还是6G运存,为什么使用手机时都会先占用一半?
- c++ 数组置0_09c语言数组详解
- 一个资深系统管理员的O2O实践(三)
- QTable中header高度
- 人件第二版(中文版)pdf
- 企业域名和企业邮箱究竟有什么关系?
- CTE6备考与考试感悟
- 三维点图和三维PCA图
- IT新渠道眼中的高价值增长如何实现?
- 安利这几款软件给需要的你
- 色阶、灰度色彩模式、灰度等级
- 【预测模型】基于DNN深度神经网络实现minist数据集预测matlab源码
热门文章
- js 多个定时器_JS中的同步/异步编程
- JAVA写同步栈_tomcat实现的同步队列和同步栈
- asterisk的NAT配置
- rt5350 中断初始化
- ARM中断分析之四:WinCE的OAL层的中断分析
- WINCE 加入驱动DLL步骤
- php公交查询系统源代码,基于Smarty公交查询系统的设计与实现(PHP,MySQL)
- 650c公路车推荐_盘点2020年各价位高性价比入门公路车
- python闭环最短路径_最短路径算法的实现(dijskstra):Python
- python image 转成字节_就是这么流弊!三行Python代码,让数据处理速度提高2到6倍