LeetCode 第247场周赛
彻底翻车,,,,, 数学能力没有了。。。。 5797. 两个数对之间的最大乘积差 因为都是正整数,乘积最大和最小的一定是最大的两个数字的乘积和最小两个数的乘积。 12345678910class Solution {public: int maxProductDifference(vector<int>& nums) { int n = nums.size(); sort(nums.begin(), nums.end()); return nums[n-1]*nums[n-2] - nums[0]*nums[1]; }}; 5798. 循环轮转矩阵 模拟一下获得每个圈的数字然后旋转k次就好。 我这里用搜索搞的, 应该是麻烦了。 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263class ...
LeetCode 第55场双周赛
GG 5780. 删除一个元素使数组严格递增 暴力一下, 枚举每个元素删除后的数据是不是严格递增的, 数据范围是100010001000. 平凡才1e61e61e6没问题的。 123456789101112131415161718192021222324class Solution {public: bool f(vector<int>& a) { for(int i=1;i<a.size();i++) { if(a[i] <= a[i-1]) return false; } return true; } bool canBeIncreasing(vector<int>& nums) { int n = nums.size(); vector<int> a; for(int i = 0;i<n;i++) { ...
Redis 学习 RDB篇
基于 Redis 6.2.1
LeetCode 第244场周赛
再再再再再再再再次翻车了 第三个没仔细想+超时挂了3次 第四个最大值没搞好+瞎提交WA了3次。。。 思维又慢,码得又慢,没救了。 5776. 判断矩阵经轮转后是否一致 模拟一下, 旋转可以多次,但状态最多就4种: 不旋转,旋转90度,旋转180度,旋转270度。 这里循环一下, 每次旋转90度,在比较是否相等就好了。 123456789101112131415161718192021222324252627282930class Solution {public: bool findRotation(vector<vector<int>>& mat, vector<vector<int>>& target) { int n = mat.size(); vector<vector<int>> temp(n, vector<int>(n)); // puts("+++++++++++++ ...
LeetCode 第243场周赛
再次翻车了 第四个卡精度搞了好久好久,,还是看了讨论区才处理精度问题的。。 第三个纯属自己代码写的太丑了,脑子不够清晰吧。赛后1分钟ac。。。 5772. 检查某单词是否等于两单词之和 简单模拟, 不过我这里写的太麻烦了。 12345678910111213141516class Solution {public: bool isSumEqual(string firstWord, string secondWord, string targetWord) { int a = 0, b = 0, t = 0; for(auto c: firstWord) { a = a*10 + (c-'a'); } for(auto c: secondWord) { b = b*10 + (c-'a'); } for(auto c: targetWord) ...
LeetCode 第53场双周赛
GG 5754. 长度为三且各字符不同的子字符串 简单模拟。 123456789101112class Solution {public: int countGoodSubstrings(string s) { int ans =0 ; for(int i=2;i<s.size(); i++) { if(s[i] != s[i-1] && s[i] != s[i-2] && s[i-1] != s[i-2]){ ans ++; } } return ans; }}; 5755. 数组中最大数对和的最小值 排序之后最大的和最小的配对,次大的和次小的配对,以此类推。 123456789101112class Solution {public: int minPairSum(vector<int>& ...
Redis 学习 数据库篇
基于 Redis 6.2.1 服务器中的数据库 Redis 服务器将所有数据库保存到server.h/redisServer结构的db数组中,db数组的每一项都是server.h/redisDb结构,每个redisDb代表一个数据库: 12345struct redisServer { // ... redisDb *db; // 数组,保存服务器的所有数据库 // ...} 说起来,四五百行的结构体,真是活久见啊。。。。 在初始化服务器时,程序会根据服务器状态的dbnum属性来决定创建多少个数据库: 12345struct redisServer { // ... int dbnum; // 服务器的数据库数量 // ...} dbnum的属性值由服务器配置的database选项决定,缺省为16,所以Redis服务器默认会创建16个数据库。 1234567891011121314// redisServer ┌───────────┐ │redisServer│ ├───────────┤ │ ...
Redis 学习 对象篇
基于 Redis 6.2.1 Redis 对象 前文也有提到,Redis 中并没有直接使用底层的基本数据结构,比如简单动态字符串(SDS)、双端链表、字典、压缩列表、整数集合等。Redis 是基于这些基本的数据结构创建了一个对象系统,这个系统包含字符串对象(string)、列表对象(list)、哈希对象(hash)、集合对象(set)和有序集合对象(sorted sort)等。每种对象都用到了至少一种前面所介绍的数据结构。 通过这五种不同类型的对象,Redis 可以在执行命令前,根据对象的类型判断一个对象是否可以执行给定的命令。使用对象的另一个好处是,可以针对不同的使用场景,采用不同的底层基本数据结构实现对象,从而优化性能。 另外,Redis 的对象系统还实现了基于引用计数的内存回收机制,当程序不再使用某个对象的时候,会自动释放这个对象所占用的内存;Redis 还通过引用计数实现了对象共享机制,在适当的条件下,多个数据库键可以共享同一个对象类节约内存。 最后,Redis 的对象记录了访问时间信息,可以用来计算数据库键的空转时长,在服务器开启了 maxmemory 功能时,空转较大的 ...
LeetCode 第242场周赛
彻底翻车了 最后一个都没写出来。。 找个理由强行解释下,可能是没睡好hhh。 5763 哪种连续子字符串更长 简单模拟, 不过我这里写的太麻烦了。 1234567891011121314151617181920212223242526272829303132class Solution {public: bool checkZeroOnes(string s) { char p = '2'; int mx1 = 0, mx0 = 0; int sum1 = 0, sum0 = 0; for(auto c: s) { if(c == p){ if(c == '0'){ sum0++; mx0 = max(mx0, sum0); } else if(c == ' ...
Redis 学习 基础数据结构篇 之 压缩列表(ziplist)
[TOC] 基于 Redis 6.2.1 图片截取自《Redis设计与实现》 压缩列表(ziplist) 压缩列表(ziplist)是列表键和哈希键的底层实现之一。 当一个列表键只包含少量列表项,并且每个列表项要么就是小整数值,要么就是长度比较短的字符串,那么Redis 就会使用压缩列表来做列表键的底层实现 当一个哈希键只包含少量键值对,并且每个键值对的键和值要么就是小整数值,要么就是长度比较短的字符串,那么Redis 就会使用压缩列表来做哈希键的底层实现 压缩列表是 Redis 为了节约内存而开发的,是由一系列特殊编码的连续内存快组成的顺序行(sequential)数据结构,是一个特殊编码的双向链表。一个压缩列表可以包含任意过个节点(entry),每个节点可以保存一个字节数组或者一个整数值。 压缩列表结构 ziplist.c 文件顶部的注释内容,解释了ziplist的结构。 ziplist本身声明为一个unsigned char *类型的字符串,总体布局如下: <zlbytes> <zltail> <zllen> <entry> ...