SJCHEN

时光,不会辜负每一个平静努力的人

0%

题目描述

  • TLV 编码是按 [ Tag Length Value ] 格式进行编码的,一段码流中的信元用Tag标识, Tag在码流中 唯一不重复 ,Length表示信元Value的长度,Value表示信元的值。
  • 码流以某信元的Tag开头,Tag固定占 一个字节,Length固定占 两个字节,字节序为 小端序
  • 现给定TLV格式编码的码流,以及需要解码的信元Tag,请输出该信元的Value。
  • 输入码流的16进制字符中,不包括小写字母,且要求输出的16进制字符串中也不要包含小写字母;
  • 码流字符串的最大长度不超过50000个字节。
阅读全文 »

stringstream 流

首先引入头文件

1
#include <sstream>

然后定义一个stringstream对象,用来输入输出,这个对象既可以把数字变成字符串,也可以把字符串变成数字,甚至可以分割被空格、制表符等符号分割的字符串(简单来说就是去空格和换行)

阅读全文 »

780. 到达终点

给定四个整数 sx , sy ,tx 和 ty,如果通过一系列的转换可以从起点 (sx, sy) 到达终点 (tx, ty),则返回 true,否则返回 false。

从点 (x, y) 可以转换到 (x, x+y) 或者 (x+y, y)。

阅读全文 »

我们以下面这道题来了解下股票问题这个框架。

具体可参考labuladong

每天都有三种「选择」:买入,卖出,无操作,我们用 buy,sell,rest表示三种选择。

但问题是,并不是每天都可以任意选择这三种选择,因为sell必须在buy之后,buy又必须在sell之后。那么rest操作之后还应该分两种状态:一种是buy之后的rest(持有了股票),一种是sell之后的rest(没有持有股票)。而且别忘了,我们还有交易次数k的限制,就是说你buy还只能在k > 0的前提下操作。

这个问题的「状态」有三个,第一个是天数,第二个是允许交易的最大次数,第三个是当前的持有状态(即之前说的rest的状态,我们不妨用 1 表示持有,0 表示没有持有)。然后我们用一个三维数组就可以装下这几种状态的全部组合:

阅读全文 »

HJ82 将真分数分解为埃及分数

描述

分子为1的分数称为埃及分数。现输入一个真分数(分子比分母小的分数,叫做真分数),请将该分数分解为埃及分数。如:8/11 = 1/2+1/5+1/55+1/110。

注:真分数指分子小于分母的分数,分子和分母有可能gcd不为1!

如有多个解,请输出任意一个。

示例:

输入:

8/11
2/4

输出:

1/2+1/5+1/55+1/110
1/3+1/6

说明:

第二个样例直接输出1/2也是可以的

阅读全文 »

单调栈的用途不太广泛,只处理一种典型的问题,叫做 Next Greater Element。

单调栈模版

给你一个数组nums,请你返回一个等长的结果数组,结果数组中对应索引存储着下一个更大元素,如果没有更大元素,就存 -1。

例如:输入一个数组 nums = [2,1,2,4,3],你返回数组[4,2,4,-1,-1]

ps: 第⼀个 2 后⾯⽐ 2 ⼤的数是 4; 1 后⾯⽐ 1 ⼤的数是 2;第⼆个 2 后⾯⽐ 2 ⼤的数是 4; 4 后⾯没有⽐ 4⼤的数,填 -1;3 后⾯没有⽐ 3 ⼤的数,填 -1。

当然我们很轻松就可以想到暴力解法,就是对每个元素后面都进行遍历,找到第一个更大的元素就可以了,但是暴力解法的时间复杂度是O(n^2)

这个问题可以这样抽象思考:把数组的元素想象成并列站⽴的⼈,元素⼤⼩想象成⼈的身⾼。这些⼈⾯对你站成一列,如何求元素「2」的Next Greater Number呢?

很简单我们只需要把它能看到的一个元素就是答案,因为矮的都被挡着看不到。

我们从后面开始看,3 前面没人,所有输入 -1,4前面没有比它大的,并且3 比它小,所以把 3 出栈,并输入 -1 ,2 前面有 4 比它大,所以输入4,并且2入栈,1 前面第一个看到的是 2, 所以输入 2, 并且进栈,2 前面看到的是 4 ,输入4 并且前面的1 和 2 都出栈。

阅读全文 »

152. 乘积最大子数组

给你一个整数数组 nums ,请你找出数组中乘积最大的非空连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。

测试用例的答案是一个 32-位 整数。

子数组 是数组的连续子序列。

阅读全文 »