主页

数字十进制位,四则运算编程技巧及力扣题目总结

写在前面 最近力扣周赛出了很多关于数字位数的题, 顾名思义, 就是对一个大整数的每一个十进制位进行操作, 由于之前对这方面的内容不太熟悉, 真正写的时候就吃亏了. 下面写一下这方面的常用的一些技巧, 例如取出任意整数的每一位等等. 取出整数的每一位 通过对10取余或者整除, 可以从个位到最高位依次得到每一个位的值, 如下: n = 12345 ans = [] while n: ans.append(n % 10) n //= 10 print(ans) # [5, 4, 3, 2, 1] 上面的是数学方法, 速度比较快, 下面是一个基于字符串的方法, 虽然慢但是直观(我初刷lc时候钟爱这种方法) n = 12345 s = str(n) ans = [i...

阅读更多

位运算常用技巧与力扣题型总结

写在前面 最近刷LeetCode, 发现很多双百题解中用到的都是位运算技巧, 下面来总结一下位运算的常用技巧. 一开始参考了知乎的一篇回答, 里面推荐一本书叫做算法心得, 英文原版为Hackers Delight, 听这个名字就知道是一些hack技巧, 有机会一定要研读一下. 下面的代码用C++给出. 可能出现的一些数字: 48: ‘0’ 65: ‘A’ 97: ‘a’ 预备知识 首先给出一些预备知识, 包括如何进制转换等. 任意进制到十进制 // 直观的想法 int x2dec_v1(string x, int k) { int ans{}, n = x.size(); for (int i{}; i <...

阅读更多

双指针,滑动窗口力扣题目汇总

可能用到的STL算法一览 前缀和计算: partial_sum 使用方法: std::partial_sum - cppreference.com; #include <numeric> #include <vector> #include <iostream> #include <iterator> #include <functional> void t1() { std::vector<int> v = {2, 2, 2, 2, 2, 2, 2, 2, 2, 2}; // 或 std::vector<int>v(10, 2...

阅读更多

力扣中的经典模拟题

写在前面 \[\mathbb Z\\ \mathbb N +\dots+,\dots,\] 日期计算 日期替换 2437. 有效时间的数目; class Solution { public: int countTime(string time) { if (time.find('?') == string::npos) return 1; auto h1 = time[0], h2 = time[1]; auto m1 = time[3], m2 = time[4]; int ans1{}, ans2{}; // hour: if (h1 == '?') { ...

阅读更多

哈希表力扣题型总结

基本哈希问题 剑指 Offer 50. 第一个只出现一次的字符 - 力扣(LeetCode); class Solution { public: char firstUniqChar(string s) { char ans{' '}; unordered_map<char, int> st; for (auto c : s) ++st[c]; for (auto c : s) if (st[c] == 1) return c; return ans; } }; // 遍历哈希表的方法 class Solution { publ...

阅读更多

高级数据结构设计力扣题目总结

写在前面 下面的这些数据结构都用到了链表, 可见链表在数据库/缓存等底层构件中的重要作用. 跳表: 数组+链表节点 1206. 设计跳表 - 力扣(LeetCode);(高级数据结构, 数据库常用) 需要设计多级结构以便降低查找的时间复杂度, 相当于在一般链表中采用了二分查找的思想, 空间换时间. class Skiplist { static constexpr int level = 8; struct Node { int val; vector<Node*> next; Node(int _v) : val(_v) { next.resize(level, nullpt...

阅读更多

C++并发编程实战笔记(一)线程概念与基本控制

写在前面 在C++ 中实现多线程还是很容易的, 不像C的pthreads接口, 下面来总结一下C++多线程的一些基本操作, 包括线程的创建, 合并, 分离, 获取ID等操作, 主要参考了C++并发编程实战(第二版)的第一二章, 这本书应该是C++并发必看的经典了. 另外参考: std::thread; 一些有用的程序 用于辅助 #include <iostream> #include <cassert> // 断言 #include <chrono> // 计时 #include <thread> // 线程 using namespace std; using namespace std::chrono; ...

阅读更多

C++内存模型与程序运行分区

写在前面   作用域 生命周期 内存区域 全局内存 整个文件 应用程序的生命周期 全局区 静态内存 声明它的函数内部 应用程序的生命周期 全局区 自动内存(局部内存) 声明它的函数内部 限制在函数执行时间内 栈区 动态内存 由引用该内存的指针决定 直到内存释放 堆区 内存模型与虚函数 虚表

阅读更多

Total views.
您是Zorch的第 个小伙伴
Hits