
学习
文章平均质量分 57
银-TaMa
吾王美如画
展开
-
1743. 从相邻元素对还原数组
题目描述存在一个由 n 个不同元素组成的整数数组 nums ,但你已经记不清具体内容。好在你还记得 nums 中的每一对相邻元素。给你一个二维整数数组 adjacentPairs ,大小为 n - 1 ,其中每个 adjacentPairs[i] = [ui, vi]表示元素 ui 和 vi 在 nums 中相邻。题目数据保证所有由元素 nums[i] 和 nums[i+1] 组成的相邻元素对都存在于 adjacentPairs 中,存在形式可能是[nums[i], nums[i+1]] ,也可原创 2021-07-25 22:54:07 · 228 阅读 · 0 评论 -
Kotlin 实战学习 函数的定义与调用
3.2 让函数更好调用可读性优化 => 命名参数当指明一个参数的名称的时候,为了避免混淆,那它之后的所有参数都要标明名称。避免过多的函数重载 => 默认参数值消除静态工具类 => 顶层函数和属性3.3 给别人的类添加方法:扩展函数和属性实质上,扩展函数是静态函数,她把调用对象作为他的第一个参数。调用扩展函数,不会创建适配对象或任何运行时的额外消耗。注意,因为是静态函...原创 2019-12-23 12:40:43 · 236 阅读 · 0 评论 -
Kotlin 可空类型系统的学习
引言什么是类型?为啥变量拥有类型?“类型就是数据的分类… 决定了该类型可能的值和可以完成的操作。”那么套用这个定义来分析一下NULL值在类型系统的地位。比如在java中null是一种数值,但是当一个引用为null的时候,并不可以在这个引用调用该类型的任何方法,这不就意味着java的类型系统在值为NULL的时候不能很好的工作,甚至当你使用instanceof运算符的时候,它的类型都是N...原创 2019-12-17 23:13:06 · 210 阅读 · 0 评论 -
《kotlin实战》阅读笔记(1)
变量 分为可变的引用(var)不可变的引用(val)可变和不可变类似于c++ 中 const 对于指针的限定,而且是顶层const 或者说指正常量。然后变量是可以进行自动类型推断的,类似于auto,前提是进行了初始化同时对于val 来说,如果编译器可以保证val只进行唯一一次初始化,则可以根据条件初始化成不同的值。 val message : String if ...原创 2019-10-30 11:45:31 · 212 阅读 · 0 评论 -
【c++回顾】简单继承和虚函数的使用
使用继承的时候有一些需要注意的地方,就是如果你真的要用new来创建这些有继承关系的类的实例,那每一个类的析构函数都要声明为virtual,否则会在一些奇怪的地方出现问题。这个细节在这一章后面的课程会提到。如果一个类(Cat)的父类(Animal)的析构函数是virtual的,那么他自己的析构函数就自动virtual。想象一下你获得了一个Animal* pAnimal;,你怎么知道他到底是Cat还...原创 2019-07-17 12:31:04 · 181 阅读 · 0 评论 -
最大子序和 优先队列
题目描述 输入一个长度为 nn 个数找到最大子序和。输出 一个数,数出他们的最大子序和。样例输入6 41 -3 5 1 -2 3样例输出7数据规模与约定 时间限制:1 s 内存限制:256 M 100% 的数据保证 1≤n≤3000001≤n≤300000因为是求子数组的和,所以先进行一个前缀和的处理,然后,使用一个单调队列来维护区间的...原创 2019-07-07 10:49:29 · 162 阅读 · 0 评论 -
【c++回顾】内存管理机制
在这个模型中,我们将会把一个 C++ 程序在运行的时候所占据的内存空间,分成以下四个部分:栈区( Stack )堆区( Heap )全局区/静态区( Global/Static )常量区( Constant )在 C++ 程序的内存空间中,我们在代码中声明的局部变量,以及函数的形式参数,都保存在栈区中——这部分内存在程序运行的时候会自动分配,而在不需要的时候也会自动释放,并不需要程序员自己去手...原创 2019-07-18 11:32:52 · 182 阅读 · 0 评论 -
【c++ 回顾】STL 常用算法
把vector里面的数字都乘以2#include <vector>#include <algorithm>#include <vector>using namespace std;int main(){ vector<int> xs{ 1,2,3,4,5 }; transform(begin(xs), end(xs),...原创 2019-07-18 10:40:54 · 504 阅读 · 0 评论 -
面试知识点小总结
1.并发与并行的区别并行才是我们通常认为的那个同时做多件事情,而并发则是在线程这个模型下产生的概念。并发表示同时发生了多件事情,通过时间片切换,哪怕只有单一的核心,也可以实现“同时做多件事情”这个效果。并发是两个任务可以在重叠的时间段内启动,运行和完成。并行是任务在同一时间运行举个我们开发中会遇到的例子,我们说资源请求并发数达到了1万。这里的意思是有1万个请求同时过来了。但是这里很明显不可能...原创 2019-07-14 22:03:47 · 399 阅读 · 0 评论 -
【c++回顾】 返回值优化
#include <iostream>using namespace std;class A {public: A() { cout << this << " constructor" << endl; } A(const A &obj) { cout << thi...原创 2019-07-13 16:41:51 · 429 阅读 · 0 评论 -
【c++ 回顾】设计一个不可以复制的类
有了NotCopyable之后,怎样才能让Student不支持复制呢?大家还记得编译器生成默认的复制构造函数和赋值操作符重载的规则吗?如果父类不存在这些函数的话,那么子类默认也不会生成。那么最简单的做法就是让Student去继承自NotCopyable。代码#include <cstdlib>#include <string>using namespace std...原创 2019-07-17 13:05:10 · 220 阅读 · 0 评论 -
【c++ 面向对象回顾】里氏代换原则
里氏代换原则的内容只有一句话:子类的对象能够替换其基类的对象被使用。举个例子,任何使用Animal的地方,我们都可以放Cat进去,而完全不扰乱程序的逻辑。而且程序里面关于Animal的假设,Cat都不能打破。这到底是什么意思呢?譬如说,凡是动物都会吃东西,这个没问题,猫也会吃。但是凡是动物都会走路,这个就不对了,因为鱼是动物,但是鱼不会走路。面对这个情况我们就有两种可能:第一种是鱼根本就不应该继承...原创 2019-07-17 13:28:10 · 983 阅读 · 0 评论 -
【leetcode】393. UTF-8 编码验证
题目UTF-8 中的一个字符可能的长度为 1 到 4 字节,遵循以下的规则:对于 1 字节的字符,字节的第一位设为0,后面7位为这个符号的unicode码。对于 n 字节的字符 (n > 1),第一个字节的前 n 位都设为1,第 n+1 位设为0,后面字节的前两位一律设为10。剩下的没有提及的二进制位,全部为这个符号的unicode码。这是 UTF-8 编码的工作方式:Char. ...原创 2019-07-20 10:40:44 · 197 阅读 · 0 评论 -
【c++ 回顾】关于友元函数的一个例子
判断一下下面这段代码能否通过编译?#include <iostream>#include <string>#include <memory>using namespace std;struct B;extern void F(B* b);struct B{ struct A { friend void F(B...原创 2019-07-17 20:04:50 · 187 阅读 · 0 评论 -
【c++ 回顾】四种cast转换
说一说c++中四种cast转换C++中四种类型转换是:static_cast, dynamic_cast, const_cast, reinterpret_caststatic_cast:static_cast: 任何具有明确定义的类型转换都可以使用static_cast进行转换,但是他无法去掉const性质 const char *cp; char *q = static_...原创 2019-07-21 12:47:54 · 415 阅读 · 0 评论 -
【C++ 回顾】智能指针
对象跟对象之间是有所有权关系的,这些关系可以用shared_ptr、weak_ptr和unique_ptr来表达。但是今天先不提智能指针的事情,先来谈谈什么是所有权。直接的讲,C++ 里面的对象所有权的关系,指的是谁负责delete谁的关系。让我们来看几个例子,假设类 A 的一个成员变量是一个指向了类 B 的实例的指针。独占所有权:如果 A 对 B 有独占所有权的话,那么 A delete B...原创 2019-07-21 15:17:29 · 135 阅读 · 0 评论 -
【c++ 回顾】STL-空间配置器
空间配置器通常的内存申请的方式有两种 1. malloc, 2. new 来申请malloc 申请内存的过程是这样的 它内部有一个将多个可用内存块连接为一个的空闲链表。在调用时,它沿链表寻找一个大到足以满足用户请求所需要的内存块。然后,将该内存块一分为二(一块的大小与用户请求的大小相等,另一块的大小就是剩下的字节)。接下来,将分配给用户的那块内存传给用户,并将剩下的那块(如果有的话)返回到...原创 2019-07-27 10:52:41 · 214 阅读 · 0 评论 -
【计算机组成原理回顾】理解虚拟内存机制
推荐阅读 计算机底层知识拾遗(一)理解虚拟内存机制虚拟内存主要提供了3个能力:给所有进程提供一致的地址空间,每个进程都认为自己是在独占使用单机系统的存储资源保护每个进程的地址空间不被其他进程破坏,隔离了进程的地址访问根据缓存原理,上层存储是下层存储的缓存,虚拟内存把主存作为磁盘的高速缓存,在主存和磁盘之间根据需要来回传送数据,高效地使用了主存虚拟地址和物理地址对于每个进...原创 2019-08-01 16:12:32 · 1360 阅读 · 0 评论 -
【leetcode】设计哈希表 - 解决方案
希望有两种解决方案可以将时间复杂度从 O(n) 降低到 O(1)。交换我们可以使用一种巧妙的策略。首先,用存储桶中的最后一个元素交换要移除的元素。然后删除最后一个元素。通过这种方法,我们成功地在 O(1) 的时间复杂度中去除了元素。链表实现此目标的另一种方法是使用链表而不是数组列表。通过这种方式,我们可以在不修改列表中的顺序的情况下删除元素。该策略时间复杂度为 O(1)。...原创 2019-09-18 22:53:13 · 456 阅读 · 0 评论 -
【c++回顾】拷贝构造函数参数必须为引用
如果其参数不是引用,则调用永远不会成功,为了调用拷贝构造函数,我们必须拷贝它的实参,但为了拷贝它的实参,我们必须调用它的实参的拷贝构造函数,为了调用它的实参的拷贝构造函数,我们必须拷贝它的实参的实参,但为了拷贝它的实参的实参,我们必须调用它的实参的实参的拷贝构造函数。。。。。形成了递归结构,GG。...原创 2019-07-13 15:46:09 · 260 阅读 · 0 评论 -
【c++ 回顾】protect 权限
类似于private权限, protect的权限对于类的使用着来说是不可见的类似与pubic权限,protect的权限对于基类的派生类和友元是可见的无法通过派生类访问基类对象的protect的成员第三条就保证了无法通过派生类来绕过protect权限例如#include <iostream>class Base {protected: int x;};c...原创 2019-07-13 15:31:32 · 1754 阅读 · 0 评论 -
Euler 27 二次“素数生成”多项式
题目链接关于这道题目需要解决的点主要是判断一个数是不是素数如何有效的减枝判断一个数是不是素数判断一个数是不是素数有很多种做法,比如试除法今天呢使用一个更快的办法米勒测试主要的原理是根据费马小定理定理描述 当且仅当 P 为素数时: ap-1 mod P 为 1 1 <= a <= p - 1那么我们只需要选取若干个a,代入以上公式求得结果,若均...原创 2019-01-08 19:33:22 · 834 阅读 · 1 评论 -
c语言-变参函数实践 - 使用putchar来模拟printf函数
其实很简单的实现对于%d的输出测试用例使用我们实现的my_printf 函数对于下列情况可以实现和使用printf相同的效果int main(){ int n = 123; my_printf("hello haizei\n"); my_printf("n = %d\n",n); my_printf("n = %d\n",456); my_printf..原创 2019-01-06 16:00:59 · 850 阅读 · 2 评论 -
1月5日 c语言学习 总结
基础的数学运算注意区别 = 与 ==赋值运算符: =条件判断运算符 ==四则混合运算 : + - × /a % b = r 等价于 a = k×b + r位运算: & 按位与 | 按位或 ~ 按位取反 ^(相同为0,不同为1,自反性 ,逆运算(+ 与 - 相反)是自己) 其中 因为抑或的逆运算就是自己,所以有一个很有趣的性质交换两个数字 a b...原创 2019-01-06 15:21:09 · 228 阅读 · 1 评论 -
C语言入门学习 一月四日总结
程序 = 算法 + 数据结构程序设计 = 编程范式(设计模式)C语言 : 面向过程C ++ (语言联邦) : 面向对象,面向过程,函数式编程(难),泛型编程函数是压缩的数组 ,数组是展开的函数总而言之 对于学习一门语言来说,最重要的是要学会组织这种语言的方式,也就是编程范式,就像是写作文一样,学会语法只能保证写的文章是没有错误的,但是想写出优美的文章就需要更多的积累,修辞,句式变...原创 2019-01-06 14:58:26 · 183 阅读 · 1 评论 -
中缀表达式求值-超级简单的递归栈的实现
问题我就不描述了二叉树我也不累述了回顾一下中缀表达式转换二叉树的过程 同时结合 二叉树的是自底向上计算的性质,我们能得到什么呢即 :优先计算的表达式在二叉树的底部,换句话说权值越高,其在二叉树的位置就越低,即 自底向上计算的时候也就越先运算。但是 对于递归栈来说,是自顶向下生成的也就是说,在生成表达式二叉树的时候,我们是先找到这个表达式里的权值最小的那个操作符,然后递归的得到左右子树的值...原创 2018-11-21 13:56:35 · 1299 阅读 · 0 评论 -
计蒜客 - C语言 程序设计 知识点 回顾
1 变量的作用域#include <stdio.h>int main() { int year; year = 2011; { int month; month = 5; printf("%d 年 %d 月\n", year, month); year = 2016; } int...原创 2018-10-18 22:19:16 · 352 阅读 · 0 评论 -
计蒜客 - c 语言 - 自定义 在线oj
问题 描述核心的 部分在于如果当 两个文件 相差一个 \n 如何处理第一眼看上去 感觉不难啊 但是 真的自己去做的时候就会发现 有点啰嗦 自己实现的现在呢 膜拜一下大佬的代码/*************************************************************************> Author: hug> Problem...原创 2018-10-18 21:56:04 · 1447 阅读 · 0 评论 -
8.15学习随笔
今天看了一句话 《Effective C ++ 》里的 因为一个不良的决定有可能不至于很快带来影响区在发展后期 才显现恶果 那时候再来矫正往往即困难 又耗时间而且代价昂贵啊 人生也是如此 条款一:view C++ as a federation of language 视 C++ 为一个语言联邦也就是说在C++的不同 次语言里采取不同的策略 但是 虽然以后不一定 使用...原创 2018-08-16 11:37:54 · 133 阅读 · 0 评论 -
最大质因数
题目描述如下最大质因数13195的所有质因数为5、7、13和29。600851475143最大的质因数是多少?这个题怎么做呢 ??难道我先要求出 根号600851475143 以内的所有素数,然后从大到小的比较吗?当然也是可行的,不过我们换一种看待数字的方式。比如 看成一系列素数相乘的形式:a = p1a1 ×p2a2×p3a3×p4a4 …啥意思呢 比如 12 可以表示为 ...原创 2019-01-09 15:28:22 · 1548 阅读 · 0 评论 -
C 语言宏的小练习_实现对google,TEST()框架的小模拟
C 语言宏的小练习_实现对google,TEST()框架的小模拟今天实现一个小小的练习,实现效果如下/************************************************************************* > File Name: test.c > Author:Gin.TaMa > Mail:1137554811@qq....原创 2019-01-15 19:18:45 · 230 阅读 · 0 评论 -
c++ 程序的一般组织结构
这里我们举个简单的例子来说明多个文件的组织方法:假设我们现在有一个类Point,那么我们就可以将其拆分成以下三个文件://Point.hclass Point{public: Point(); //其他类成员};//Point.cpp#include "Point.h"Point::Point(){ //类成员函数实现}//main.cpp#include "P...原创 2019-07-02 18:53:48 · 1225 阅读 · 0 评论 -
c++ new 与 malloc 区别
这里需要说明的是,new运算符和malloc函数,并不只是有语法层面的不同——两者的功能是完全不一样的。malloc只是分配一块指定大小的堆内存,而new则不同——它同时包括两个步骤:调用malloc分配一片堆内存建立变量或者对象——如果要建立的是一个对象的话,那么这一步new运算符会调用类的构造函数来完成除此之外,还有一点是 重载的new运算符——“就地构造” placement new。它...原创 2019-07-02 16:29:19 · 195 阅读 · 0 评论 -
【c++回顾】虚函数
虚函数的出现是为了实现多态。多态我感觉 是当一个引用根据它实际指向的对象,执行对应的方法。因为父类类型的指针,或引用可以指向继承了该父类的子类的对象。普通函数的执行是跟着类走的,虚函数的执行是跟着对象走的所以呢,通过虚函数来使用类的多态。父类声明一个虚函数,由子类来实现,当然了,子类可以覆盖或着继续使用父类的虚函数。那么纯虚函数是啥呢?就是父类完全不去实现这个虚函数,意味着子类要继承这...原创 2019-07-07 23:11:26 · 127 阅读 · 0 评论 -
c++ 常量指针 和 指针常量
常量指针是指针指向的内容是常量,可以有一下两种定义方式:const int * n;int const * n;常量指针说的是不能通过这个指针改变变量的值,但是还是可以通过其他的引用来改变变量的值。int a=5;const int* n=&a;a=6;常量指针指向的值不能改变,但是这并不是意味着指针本身不能改变,常量指针可以指向其他的地址。int a=5;i...原创 2019-07-02 11:04:00 · 326 阅读 · 0 评论 -
c++ 简易内存模型
在这个模型中,我们将会把一个 C++ 程序在运行的时候所占据的内存空间,分成以下四个部分:堆区(Heap)栈区(Stack)全局静态变量区(Static)常量区(Constant)在 C++ 程序的内存空间中,我们在代码中声明的局部变量,以及函数的形式参数,都保存在栈区中——这部分内存在程序运行的时候会自动分配,而在不需要的时候也会自动释放,并不需要程序员自己去手动维护。而我们...原创 2019-07-02 10:49:39 · 165 阅读 · 0 评论 -
3 * 3 矩阵行列式 计算
题目如下就是计算一个3 * 3 和 一个 2 * 2 的行列式。思路如下把x和y分开来看各自的变化规律x 始终是 1 => 2 => 3y 是一个循环变化的过程,那就 ( y + 1 )% 3 来表示循环变化的过程。这样这个过程就可以用两层循环来表示啦。代码如下int a_value = 0; for (int i = 0; i < 3; i++) { ...原创 2019-07-01 16:07:15 · 55287 阅读 · 0 评论 -
【数据结构回顾】单链表实现
【数据结构回顾】单链表实现/************************************************************************* > File Name: list.h > Author:Gin.TaMa > Mail:1137554811@qq.com > Created Time: 2019年03月26日 星期...原创 2019-03-26 20:54:56 · 127 阅读 · 0 评论 -
【C 知识点回顾】泛型指针实现Swap
【C 知识点回顾】泛型指针实现Swap/************************************************************************* > File Name: swap.c > Author:Gin.TaMa > Mail:1137554811@qq.com > Created Time: 2019年03月...原创 2019-03-26 13:31:39 · 197 阅读 · 0 评论 -
[学习] 鸿洋大大的万能适配器(1)
总结一下从 ViewHolder 开始学习public ViewHolder(Context context, View itemView) { super(itemView); mContext = context; mConvertView = itemView; mViews = new SparseArra...原创 2018-06-24 17:31:06 · 1005 阅读 · 0 评论