自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(30)
  • 资源 (1)
  • 收藏
  • 关注

原创 完全平方数

给定正整数n,找到若干个完全平方数(比如1, 4, 9, 16, ...)使得它们的和等于n。你需要让组成和的完全平方数的个数最少。示例1:输入: n = 12输出: 3 解释: 12 = 4 + 4 + 4.示例 2:输入: n = 13输出: 2解释: 13 = 4 + 9.凑数是比较典型的广度搜索问题。 public int numSqua...

2019-08-21 14:43:24 229

原创 最长回文串(马拉车算法)

/*最长回文子串(Manacher算法 马拉车算法-_-) 马拉车算法需要计算以每个字符为中心的回文串半径。并记录最右边界 马拉车算法基于这样一个事实,从回文串的中心到两边是对称的,意味着以两边对称的字符为中心的回文串半径相等(在不超过最右边界的情况下,如果超出就需要扩展搜索) */ public String longestPalindr...

2019-07-12 20:28:19 335

原创 寻找两个有序数组的中位数

给定两个大小为 m 和 n 的有序数组nums1 和nums2。请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为O(log(m + n))。你可以假设nums1和nums2不会同时为空。示例 1:nums1 = [1, 3]nums2 = [2]则中位数是 2.0示例 2:nums1 = [1, 2]nums2 = [3, 4]则中...

2019-07-12 18:44:06 198

原创 只出现一次的数字

给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?其它出现两次,某元素只出现一次,看到这个第一反应就是异或。因为 a^b^b = a;所以只需要遍历异或,最后的结果就是只出现一次的元素 int singleNumber(vector<...

2019-06-26 19:42:29 116

原创 旋转数组

这个题的一种解法挺有意思,记录一下。给定一个数组,将数组中的元素向右移动k个位置,其中k是非负数。输入: [1,2,3,4,5,6,7] 和 k = 3输出: [5,6,7,1,2,3,4]解释:向右旋转 1 步: [7,1,2,3,4,5,6]向右旋转 2 步: [6,7,1,2,3,4,5]向右旋转 3 步: [5,6,7,1,2,3,4]研究了半天,发现...

2019-06-26 19:34:23 96

原创 单词拆分 II

单词拆分 II给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,在字符串中增加空格来构建一个句子,使得句子中所有的单词都在词典中。返回所有这些可能的句子。说明:分隔时可以重复使用字典中的单词。你可以假设字典中没有重复的单词。示例 1:输入:s = "catsanddog"wordDict = ["cat", "cats", "and", "sand",...

2019-06-14 13:14:17 294

原创 单词拆分

给定一个非空字符串s和一个包含非空单词列表的字典wordDict,判定s是否可以被空格拆分为一个或多个在字典中出现的单词。说明:拆分时可以重复使用字典中的单词。 你可以假设字典中没有重复的单词。示例 1:输入: s = "leetcode", wordDict = ["leet", "code"]输出: true解释: 返回 true 因为 "leetcode" 可...

2019-06-14 11:24:11 201

原创 海盗分赃问题

有5个海盗,按照等级从5到1排列。最大的海盗有权提议他们如何分享100枚金币。但其他人要对此表决,如果多数反对,那他就会被杀死。他应该提出怎样的方案,既让自己拿到尽可能多的金币又不会被杀死?(提示:有一个海盗能拿到98%的金币)注意,是多数人反对才无效,意味着人数相同的情况下提议成功思路:逆推,只剩2人情况,自己拿100,,即两人情况下分配为2号100,1号0。3人情况,1号...

2019-05-07 22:59:42 870

原创 字符串内部大小写交换

有一个由大小写组成的字符串,现在需要对他进行修改,将其中的所有小写字母排在大写字母的前面(大写或小写字母之间不要求保持原来次序),如有可能尽量选择时间和空间效率高的算法。c语言函数原型void proc(char *str),也可以采用你自己熟悉的语言。思路:两个指针i,j 初始i指向头,j指向尾. 从头遍历,如果为大写,将位置i,j互换同时j-1,否则i+1,直到i=j....

2019-05-07 22:13:42 395

原创 C++进阶之 函数

入口函数main:main()函数是C++的入口函数,一般情况返回值为int类型(这也是C++标准的要求,所以部分严格的编译器要求main返回值必须为int),和正常函数不同的是,如果main函数没有显式出现return,大部分编译器会默认添加return 0而不是编译失败。虽然main函数是入口函数,但并不代表一定是第一个执行的函数。所有外部对象的构造函数、类中的静态对象有初始化时这些对...

2018-09-05 17:45:23 357

原创 数据结构

结构体:将多个基本类型聚合在一起(也包括指针和数组),形成一个新的自定义类型,这就是结构体。//一个描述飞机航班的结构体struct flightType{ char flightNum[7]; int altitude; int longitude; int latitude; int heading; double airs...

2018-08-22 18:12:09 224

原创 C语言 递归、IO

递归的本质:将大任务拆成处理逻辑完全相同的子任务,不断缩小处理范围,直至结束。 即递归函数调用自身,完成更小的子任务。注意,递归也需要有明确的结束条件,即处理完不能再次拆解的子任务后停止。能使用递归的程序一般都能通过使用循环来解决,但是在合适的情况下递归有更好的可读性,但是也可能导致性能开销的变大(递归需要进行大量的函数调用),所以并不存在谁能替代谁,而是在合适的时机选择合适的方式来处理,这就...

2018-08-22 17:13:16 149

原创 指针和数组

指针是内存对象的简单地址,用指针,可以间接的访问这些对象(知道内存单元的地址,当然就能够访问到内存单元了)。简单的把数据作为参数传入函数,函数即使修改参数的内容也不会对调用者中的数据产生影响(看了之前的函数底层实现,应该很容易的知道这是为什么),而使用指针,使得函数可以修改调用者传递进来的参数(传递的是地址,可以通过地址访问到对应的内存对象,接着就可以对其做修改了)数组就是内存中一组用来存...

2018-08-21 19:19:33 137

原创 测试与调试

通常来讲,开发过程中程序员在测试和调试阶段花费的时间远比编写代码的时间更长。不会调试的程序不是好程序!!!测试的目的是暴露错误,调试的目的是发现错误发生的原因并修复解决。测试分为白盒和黑盒,黑盒测试其实就是测试功能的完整性,是不是符合需求,并不关心内部实现,即编写的测试用例和实现代码内部完全独立。因为黑盒无法获知内部代码实现情况,所以代码本身可能存在的问题对黑盒而言也是未知的,这种情况...

2018-08-21 18:07:20 5373

原创 函数的底层实现

函数是什么,怎么用这个就不多说了,基础中的基础,大家都知道。说一说函数的底层实现原理。C语言中,函数调用包括三个步骤:1.调用,调用者将参数传递给被调用者,并交出控制权。2.执行,被调用者执行任务。3.被调用者返回结果,并将控制权交还给调用者。调用机制实现中,函数必须是“调用者无关的”,因为一个函数可能被不同的调用者调用。 运行时栈首先,函数执行之前,必须在内存...

2018-08-20 16:58:16 1767

原创 变量、运算符、控制结构

变量和运算符没什么好说的,非常基础的东西,接触过代码的都知道,不多说了,需要注意的可能就是变量命名规则,不同的数据类型占用的内存空间情况以及变量的作用空间(全局和局部)和在不同的作用空间中变量的初始化情况,运算符需要注意的就是优先级了,就像平常的算术运算* / 高于+ -一样。局部变量默认初始值不确定,因为为局部变量分配的内存可能曾经被使用过并且没有被特意清除,所以可能包含的是之前使用的内容。...

2018-08-20 10:30:04 284

原创 C++ 函数参数数目未确定

声明这些函数的方式是在参数表最后用省略号(...)结束如 int printf(const char* format, ...){}要解析函数的参数需要用到va_list,声明一个va_list,然后使用宏va_start定义并初始化va_list,再通过宏va_arg按顺序提取出各个无名参数,每次调用va_arg,都需要提供一个类型(va_arg会假定这就是被传递参数的实际类型,但是它并...

2018-08-18 09:59:26 435

原创 c语言系统概论

高级语言相较于低级语言:汇编语言相较于ISA指令(机器码)而言可读性更好。但是这还是不够,因为相较于现实语言的自然表达而言还是太过于抽象了。高级语言的作用就体现出来了。对数值的符号命名(变量的定义)高级语言不用像汇编一样需要手工分配相应的内存地址,并注意不同类型的数据处理,而高级语言只需简单的分配一个名字及类型(变量名和变量的数据类型)即可,剩余的工作都由编译器自动完成(分配合适的地址...

2018-08-17 17:12:37 947

原创

总算开始栈了。栈是一种数据结构,它具有这样的访问性质,后进入的先取走,即后进先出(LIFO)。栈的内存实现:由一段连续的内存空间和一个寄存器指针(栈指针)组成。栈指针的内容是一个地址值,始终指向栈的顶部(即最后进入的元素)。压入栈的元素在内存空间都占据一个独立的位置,但是在做出栈和入栈操作时,栈中的其他数据不需要移动,只需要移动栈指针即可。看图说话顺序压入18、31、5、12,然后...

2018-08-16 10:31:06 273

原创 TRAP程序和子程序

LC-3 TRAP程序由于像硬件I/O操作过于底层,如果直接让用户程序员去自己处理,有两个问题,1门槛过高,如程序要从键盘读取输入,则需要了解详细的硬件底层I/O操作。2如果赋予用户程序员硬件寄存器的读写权限,会造成很多复杂问题,硬件的设备寄存器通常由很多程序共享,如果出现误操作,则会影响其他用户程序的正常执行。所以设备寄存器是有权限的,只能被具有合适权限的程序访问。为了解决这个问题,我们...

2018-08-14 16:13:27 1581

原创 输入输出I/O

可以通过TRAP指令请求操作系统完成输入输出,输入(0x3002),输出(0x3010)设备寄存器:跟一个I/O设备进行交互,需要用到多个设备寄存器(device register),即使最简单的也需要两个,一个用来跟计算机之间传输的数据(设备数据寄存器),一个用来指示设备当前的状态,如设备是否空闲、最近处理的I/O任务等(设备状态寄存器)。内存映射I/O和专用I/O指令指令访问I...

2018-08-13 18:01:24 1282

原创 编程和汇编语言

编程分为两个部分:编写程序和修补程序(俗称改bug),通常而言,修补工作所花费的时间和精力远大于编写。结构化编程:将问题系统的分解为多个独立的、足够小的模块,这些小模块可以被独立的开发,运行和测试。这种机制又称为系统分解,即将一个大任务分解为多个子任务集合。大问题划分为小问题贯穿了整个编程的过程,拥有良好的问题拆分的编程思维是设计高效的算法和实现优秀的程序的必要条件。三种结构:...

2018-08-10 18:23:46 2188

原创 LC-3结构

ISA定义了软件编程所需要的必要而完整的描述。ISA给出了内存组织方式,寄存器组,指令集(包括操作码,数据类型,寻址模式)等信息。LC-3的数据处理是16位的,所以对于LC-3来说,16位为一个字,LC-3也可称为一个“字寻址”机器。寄存器从内存中获取数据的速度很慢(通常远不止一个周期),所以,LC-3也提供了临时存储空间,访问速度为一个周期。实现方式为寄存器,LC-3提供了一...

2018-08-10 11:26:56 12165

原创 冯·诺伊曼模型

计算机运行有两个前提:任务描述(以程序或代码方式表述)和计算机本身的运行能力(任务的执行者)程序是计算机指令的集合,每条指令就是一个计算机的基本动作,指令是程序的最小单位(原子操作),即要么都执行,要么都不执行,不可能只执行一部分。计算机就是通过一条条的执行指令来完成工作任务的。冯·诺依曼模型包括五个部分:内存,处理单元,控制单元, 输入,输出 内存单元包括MAR(Memory...

2018-08-09 17:51:50 11653

原创 逻辑电路

计算机由非常多的简单逻辑单元组成, 即包含着千万以上个MOS晶体管。本篇主要介绍MOS晶体管的工作原理和基于MOS晶体管实现逻辑门,以及逻辑门组合构建计算机的组成单元。MOS晶体管我们知道电路中电子的流动是通过开关来控制的,为了电子流动,电路中的各个单元需要形成回路,而通过开关的开闭来影响电路的闭合和断开,MOS晶体管就是这个开关。     分为n型和p型MOS。n型MOS示意...

2018-08-08 19:52:05 6217

原创 0和1

        庞大的计算机系统本质就是由0和1构成的。计算机内部由数以百万计的器件控制着电路的工作,而电路本身只有两个状态,0无电压,1有电压,为了表示更多的数值状态,我们把多个电路组合并起来使用,这样就有了N条线路表示N个bit位。这样就可以表示2的N次方个不同的状态。计算机的数据类型也是通过这种二进制的方式来表达的。  无符号整数,有符号整数和补码          N个bit位...

2018-08-07 16:10:05 1385

原创 计算机原理初探

最经典的一句话:不要在脑子里对软件和硬件做区分。这也是计算机概论中两个重要理念之一,在设计硬件时如果我们具备软件相关的知识,那肯定能做出更好的设计,只有懂得需要,才能对症下药。软件设计也是一样的,如果能懂得硬件的运行机制,设计实现的程序肯定会比不懂的更有效率。另外一个就是抽象。对应抽象的理解个人认为就是要把有限的精力用在事情的本质上,而不要过于注重底层细节,这将大大提高我们的工作效率。...

2018-08-06 19:03:05 258

原创 开篇

不知不觉,已当码狗7年。项目经验越来越多,知识体系越来越复杂,可是近两年越发觉得进步缓慢,最近停下来理了理整个7年,蓦然回首,才发现根源在于对计算机的了解如此浅薄。计算机工作原理,操作系统,编译原理,高级语言的底层设计。既然发现了,那就重新出发吧。  ...

2018-08-06 11:04:28 127

原创 Android启动apk时主activity多次调用

新上线的项目部分手机出现了同时初始化多次平台sdk的情况,这个sdk是写在主activity的 onCreate方法里面,这就意味着apk启动时主activity创建了多次。网上搜索一番,给出的原因是手机打开应用时创建了多个进程(除了apk的主进程之外,还有一个后台service进程)解决办法: 在oncreate里面做初始化的时候先判断一下进程是不是apk的主进程

2017-12-09 11:15:03 797

原创 unity多主activity的处理

刚刚接收sdk,unity里面的插件有多个需要在主activity中,研究了半天,非常蛋疼解决办法 1  activity之间一层一层的继承,需要改sdk的源码 2  自己写一个主activity,把各个activity需要做的处理在里面实现一遍(需要sdk提供相关的实现说明)总结, android 的sdk真是恶心!

2017-09-14 13:11:57 2566 1

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除