这题主要考察的就是哈希表的知识点,先用哈希表存下来每个字母的对应字母(即对照表),然后再遍历message字符串通过哈希表依次解密每个字母。
class Solution {
public:
string decodeMessage(string key, string message) {
unordered_map mp;
int i = 0;
for(auto ch : key){
if(mp.count(ch) == 0 && ch != ' ') {
mp[ch] = 'a' + i;
i ++;
}
}
int n = message.size();
string res = "";
for(int i = 0; i < n; i ++ ){
if(message[i] != ' ') res += mp[message[i]];
else res += ' ';
}
return res;
}
};
本题是一个经典螺旋矩阵问题,利用方向矩阵依次螺旋遍历二维矩阵并赋值。
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class Solution {
public:
vector> spiralMatrix(int m, int n, ListNode* head) {
vector> res(m, vector(n, -1));
int dx[4] = {-1, 0, 1, 0}, dy[4] = {0, 1, 0, -1};
int x = 0, y = 0, d = 1;
for(int i = 0; i < n * m && head; i ++ ){
res[x][y] = head->val;
int a = x + dx[d], b = y + dy[d];
if(a < 0 || a >= m || b < 0 || b >= n || res[a][b] != -1){
d = (d + 1) % 4;
a = x + dx[d], b = y + dy[d];
}
x = a, y = b;
head = head->next;
}
return res;
}
};
定义一个标志符(cnt = 0),每次输入进行判断,若输入为1,则标志符置1,最后判断标志符,若为0,则该序列中不含1,反之则有1。
#include
using namespace std;
int main()
{
int n;
cin >> n;
int cnt = 0;
for(int i = 0;i < n ; i ++ ){
int x;
cin >> x;
if(x == 1) cnt = 1;
}
if(cnt == 1) cout << "YES" << endl;
else cout << "NO" << endl;
return 0;
}
本题主要是用双指针来解,对整个序列进行一个遍历,对每一段满足条件的子序列计算一下长度,并用res保存最长满足条件的子序列。
#include
using namespace std;
const int N = 2e5 + 10;
int a[N];
int main()
{
int n;
cin >> n;
for(int i = 0; i < n; i ++ ) scanf("%d", &a[i]);
int res = 0;
for(int i = 0; i < n; i ++ ){
int j = i + 1;
while(j < n && a[j] <= a[j -1] * 2){
j ++;
}
res = max(res, j - i);
i = j - 1;
}
cout << res << endl;
return 0;
}