我最不愿意的,就是将写博客或者是学习技术变为一项工作或者负担,应该将它们视为生活中的一种消遣。...你从不曾听人说“我坚持玩了十年的电子游戏”,或者“坚持看了十年动漫、电影”、“坚持和心爱的女友相处了十年”吧?我从来不曾坚持,因为我将其视为一个爱好和消遣,就像许多人玩网络游戏一样。...因为这方面的著作很多,所以这里只给出简单的描述和实现,供我本人及感兴趣的朋友参考。我会尽量用C#和C++两种语言实现,对于一些不好用C#表达的结构,仅用C++实现。...swap()方法则用于交换数组中的两条记录,也对交换数进行了打印(这里我注释掉了,但在测试时可以取消对它们的注释)。外层for循环控制变量i表示当前处理第i条记录。...这里要注意的是分组中记录在原数组中的位置,以第2个分组{14,20}来说,它的下标是(1,5),所以这两个记录在原数组的下标分别为a[1]=14;a[5]=20。
在对长度为26的vector进行操作前,我们先判断两个字符串的长度是否相等,这可以省去很多时间。...如果是0,那么没有出现过,如果不是0,那么出现过。 这个时候我们不用一个个地去循环,去遍历,直接就访问了。 那可不可以同样利用这种方法来处理字母串呢? 答案是可以的,我们可以用哈希表。...哈希表其实就是数组+链表的结构,在c++中,笔者觉得map这种数据结构可能就是实现了哈希表的算法。 哈希表结合了数组的快速访问、修改和链表的无限长度两个特点,可以参考下面这张图。 ?...左边是数组,快速访问和修改,右边的链表延伸出去,无限长度。 我们以字母串作为键值,像用vector查看数字串一样去判断。...哈希表其实就是我们平时常用的vector的升级版本,用map实现时,既可以实现快速访问,又有好的哈希函数,使得空间充足。 神奇神奇~
哈喽,我是子牙。十余年技术生涯,一路披荆斩棘从技术小白到技术总监到JVM专家到创业。技术栈如汇编、C语言、C++、Windows内核、Linux内核。特别喜欢研究虚拟机底层实现,对JVM有深入研究。...开始…… String类 在讲硬核内容之前,我们先练个基本功:深入理解String类 image.png 这里面有两个点需要关注一下: 存储字符串内容用的是char数组 构造函数给value赋值用的是等于号...,不是调用copy之类的函数,意味着两个String用的是同一个char数组,即两个String对象,字符串内容指向的是同一个 用的同一个char数组,字符串内容指向的是同一个,可能不太好理解,后面会讲到...一个Java代码级别的字符串,在JVM中会创建两个C++对象:一个是new String对应的oop,还有一个是char数组对应的typeArrayOop。 不理解oop?...这里顺便说下==与equals的区别:==的意思是比较的两个字符串指向的是JVM中的同一个字符串,即内存地址相同。equals是比较的两个字符串的内容是否一样,在JVM中可能是不同的字符串。
相信这么努力的你 已经置顶了我 C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构。...C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现过程(事务)控制)。...C++,首要考虑的是如何构造一个对象模型,让这个模型能够契合与之对应的问题域,这样就可以通过获取对象的状态信息得到输出或实现过程(事务)控制。...所以C与C++的最大区别在于它们的用于解决问题的思想方法不一样。之所以说C++比C更先进,是因为“ 设计这个概念已经被融入到C++之中 ”。...C与C++的最大区别:在于它们的用于解决问题的思想方法不一样。之所以说C++比C更先进,是因为“ 设计这个概念已经被融入到C++之中 ”,而就语言本身而言,在C中更多的是算法的概念。
大家好,我是大彬~ 春招来啦,今天给大家分享Java基础高频面试题(第一弹),希望小伙伴们看完之后面试稳过! Java的特点 Java是一门面向对象的编程语言。...2、继承是从已有的类中派生出新的类,新的类继承父类的属性和行为,并能扩展新的能力,大大增加程序的重用性和易维护性。在Java中是单继承的,也就是说一个子类只有一个父类。...当赋值100给Integer时,刚好在这个范围内,所以从cache中取对应的Integer并返回,所以二次返回的是同一个对象,所以==比较是相等的,当赋值200给Integer时,不在cache 的范围内...toString:默认输出对象地址。可以重写toString方法,按照重写逻辑输出对象值。 equals:默认比较两个引用变量是否指向同一个对象(内存地址)。...作为一名转码选手,深感这一路的不易。希望我的分享可以帮助更多的小伙伴,我踩过的坑你们不要再踩!
❝如果哈希值比较少、特别分散、跨度非常大,使用数组就造成空间的极大浪费! ❞ 第349题. 两个数组的交集 题意:给定两个数组,编写一个函数来计算它们的交集。 ?...「说明:」 输出结果中的每个元素一定是唯一的。 我们可以不考虑输出结果的顺序。 思路 这道题目,主要要学会使用一种哈希数据结构:unordered_set,这个数据结构可以解决很多类似的问题。...注意题目特意说明:「输出结果中的每个元素一定是唯一的,也就是说输出的结果的去重的, 同时可以不考虑输出结果的顺序」 这道题用暴力的解法时间复杂度是O(n^2),那来看看使用哈希法进一步优化。...可以发现,貌似用数组做哈希表可以解决这道题目,把nums1的元素,映射到哈希数组的下表上,然后在遍历nums2的时候,判断是否出现过就可以了。...:multiset底层实现都是红黑树,std::unordered_set的底层实现是哈希表, 使用unordered_set 读写效率是最高的,并不需要对数据进行排序,而且还不要让数据重复,所以选择unordered_set
题目描述 给定一个放有字符和数字的数组,找到最长的子数组,且包含的字符和数字的个数相同。 返回该子数组,若不存在这样的数组,返回一个空数组。...那道题是要求是否含有总和为 的整数倍的连续子数组。而本题要求的是最长的子数组,满足数字和字母个数相等。 我们可以把字母抽象成 ,数字抽象成 ,那么子数组的总和含义就是数字个数与字母个数的差值。...假设子数组 是满足字母个数和数字个数相等的,那么这段子数组总和必然是 。如果我们用前缀和来进行优化的话, ,也就是说 和 的值是相等的。...所以我们只需要求一遍前缀和,如果 没有在之前出现过,那就保存一下 最开始出现的下标是 。否则的话就看一下当前子数组长度 和历史最优的长度 谁大,然后决定更不更新。...实际实现中 c++ 还是可以采用 unordered_map 来当作哈希表保存下标。 时间复杂度是 。
两个数组的交集 https://leetcode-cn.com/problems/intersection-of-two-arrays/ 题意:给定两个数组,编写一个函数来计算它们的交集。 ?...说明:输出结果中的每个元素一定是唯一的。我们可以不考虑输出结果的顺序。 思路 这道题目,主要要学会使用一种哈希数据结构:unordered_set,这个数据结构可以解决很多类似的问题。...注意题目特意说明:输出结果中的每个元素一定是唯一的,也就是说输出的结果的去重的, 同时可以不考虑输出结果的顺序 这道题用暴力的解法时间复杂度是O(n^2),那来看看使用哈希法进一步优化。...那么用数组来做哈希表也是不错的选择,例如242. 有效的字母异位词 但是要注意,使用数组来做哈希的题目,是因为题目都限制了数值的大小。 而这道题目没有限制数值的大小,就无法使用数组来做哈希表了。...::multiset底层实现都是红黑树,std::unordered_set的底层实现是哈希表, 使用unordered_set 读写效率是最高的,并不需要对数据进行排序,而且还不要让数据重复,所以选择
1、面向对象和面向过程的区别 面向过程: 是分析解决问题的步骤,然后用函数把这些步骤一步一步地实现,然后在使用的时候一一调 用则可。性能较高,所以单片机、嵌入式开发等一般采用面向过程开发。...另外需要注意的是: Object 的 hashcode 方法是本地方法,也就是用 c 语言或 c++ 实现的,该方法通常用来将对象的 内存地址 转换为整数之后返回。...如果两个对象相等,则 hashcode 一定也是相同的。两个对象相等,对两个对象分别调用 equals 方法都返回 true。但是,两个对象有相同的 hashcode 值,它们也不一定是相等的 。...如果没有重写 hashCode(),则该 class 的两个对象无论如何都不会相等(即使这两个对象指向相同的数据) 为什么两个对象有相同的 hashcode 值,它们也不一定是相等的?...--- 欢迎关注公众号 山间木匠 , 我是小春哥,从事 Java 后端开发,会一点前端、通过持续输出系列技术文章以文会友,如果本文能为您提供帮助,欢迎大家关注、 点赞、分享支持,我们下期再见!
思路 这又是一道标准的KMP的题目。 我们在字符串:都来看看KMP的看家本领!里提到了,在一个串中查找是否出现过另一个串,这是KMP的看家本领。 那么寻找重复子串怎么也涉及到KMP算法了呢?...这里就要说一说next数组了,next 数组记录的就是最长相同前后缀( 字符串:听说你对KMP有这些疑问?...最长相等前后缀的长度为:next[len - 1] + 1。 数组长度为:len。...然后通过字符串:都来看看KMP的看家本领!讲解一道KMP的经典题目,判断文本串里是否出现过模式串,这里涉及到构造next数组的代码实现,以及使用next数组完成模式串与文本串的匹配过程。...中又给出了详细的讲解。 在留言区留下你的思路吧! -------end------- 我是程序员Carl,哈工大师兄,先后在腾讯和百度从事技术研发多年,利用工作之余重刷leetcode。
★用一种算法使通用字符串相匹配。 ★颠倒一个字符串。优化速度。优化空间。 ★颠倒一个句子中的词的顺序,比如将“我叫克丽丝”转换为“克丽丝叫我”, 实现速度最快,移动最少。 ...链表结点定义如下: struct ListNode { int m_nKey; ListNode* m_pNext; }; 第14题(数组): 题目:输入一个已经按升序排序过的数组和一个数字, 在数组中查找两个数...例如:输入两个字符串BDCABA和ABCBDAB,字符串BCBA和BDAB都是是它们的最长公共子串, 则输出它们的长度4,并打印任意一个子串。...因此这道题实质上是要求我们用两个栈来实现一个队列。...题目:输入一个正整数数组,将它们连接起来排成一个数,输出能排出的所有数字中最小的一个。 例如输入数组{32, 321},则输出这两个能排成的最小数字32132。 请给出解决问题的算法,并证明该算法。
冒泡排序算法原理再来回顾一下冒泡排序这款经典算法的原理,冒泡排序算法的核心思想是通过多次遍历待排序序列,每次比较相邻的两个元素,如果它们的顺序不正确,则交换它们的位置。...具体原理流程图如下所示:具体实现步骤接下来看看核心的实现步骤,其实借助C++语言实现冒泡排序的步骤只需五步,具体使用C++语言实现冒泡排序的步骤如下所示:首先需要定义一个待排序的数组,并确定数组的长度;...其中n是待排序序列的长度,再加上冒泡排序算法每次只交换相邻元素,所以冒泡排序是一种稳定的排序算法,相等元素的相对位置在排序后都不会改变,这是一个非常棒的优点。...优化可能性再来聊一个比较有深度的话题,关于C++实现冒泡排序的优化。虽然冒泡排序算法简单易懂,但在实际应用中,它的效率相对较低,尤其是对于大规模的数据排序,冒泡排序的性能不够理想,甚至性能较差。...而且应该大家也学到了冒泡排序是一种简单但有效的排序算法,尤其是它的原理,通过多次比较和交换相邻元素的方式实现序列的排序,经过学习冒泡排序算法,我们可以深入理解排序算法的工作原理,并在实际应用中灵活运用。
题目描述 在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。...例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。 解题思路 最简单的就是用一个数组或者哈希表来存储已经遍历过的数字,但是这样需要开辟额外的空间。...如果题目要求不能开辟额外的空间,那我们可以用如下的方法: 因为数组中的数字都在0~n-1的范围内,所以,如果数组中没有重复的数,那当数组排序后,数字i将出现在下标为i的位置。...如果是,则接着扫描下一个数字;如果不是,则再拿它和m 位置上的数字进行比较,如果它们相等,就找到了一个重复的数字(该数字在下标为i和m的位置都出现了),返回true;如果它和m位置上的数字不相等,就把第...*duplication in C/C++ // 这里要特别注意~返回任意重复的一个,赋值duplication[0] // Return value: true if
:由于序列是一个有序序列,可以利用该性质,设置左右两个节点,每次取中间值与之进行比较,如果大于中间值,表明是位于右半部分,如果小于中间值,表明位于左半部分,如果相等,则返回下标,时间复杂度为。...整数数组 nums 按升序排列,数组中的值 互不相同 。...:如果根节点具有左右节点,判断二者元素是否相等,如果相等,递归判断左右节点的情况,同步移动两个指针遍历树,p指针左移,q指针右移,每次检测当前p和q节点的值是否相等,如果相等再判断左右子树是否对称 迭代方式...每次提取两个结点并比较它们的值(队列中每两个连续的结点应该是相等的,而且它们的子树互为镜像),然后将两个结点的左右子结点按相反的顺序插入队列中。...当队列为空时,或者检测到树不对称(即从队列中取出两个不相等的连续结点)时,该算法结束。
从第一行的描述可以了解到 Unsafe 提供了硬件级别的操作,比如说获取某个属性在内存中的位置,比如说修改对象的字段值,即使它是私有的。...举两个例子,比方说: public native long staticFieldOffset(Field paramField); 这个方法可以用来获取给定的 paramField 的内存地址偏移量,...); 前一个方法是用来获取数组第一个元素的偏移地址,后一个方法是用来获取数组的转换因子即数组中元素的增量地址的。...当然这需要有一定的 C/C++ 基础,对内存分配有一定的了解,这也是为什么我一直认为 C/C++ 开发者转行做 Java 会有优势的原因。...2、valueOffset 表示的是变量值在内存中的偏移地址,因为 Unsafe 就是根据内存偏移地址获取数据的原值的。 3、value 是用 volatile 修饰的,这是非常关键的。
如下代码输出它们的地址: var a = 1 var p = &a fmt.Printf("%p\n", p) fmt.Printf("%p\n", &p) 我这里的输出结果是,变量 a 和 p 的地址分别为...为什么啰啰嗦嗦的说这些,因为在学习 C 语言,会单独强调址的概念,但在 Go 中,指针相对弱化,也是归于值类型之中。 引用的本质 前面说过,引用是某块内存的别名。...分享一篇 C++中“引用”的底层实现 的文章,有兴趣仔细读读,我只是看了个大概。 而其他一些语言中,引用的本质其实是 struct 中包含指针,比如 Python。...结构中的其他两个成员起辅助作用。 现在看来,引用的实现主要有两种。一是 C++ 的思路,引用其实一种便于使用指针的语法糖,和我们想象中的别名含义一致。...这种方式的验证非常简单,我们在上面的 C++ 和 Go 的例子中已经输出了形参和实参的地址,比较下即可得出结论。 总结 本文主要从引用的类型和传递两个角度出发,深入浅出的分析了 Go 中的引用。
这次我的实现里面可能会比较耗时的点:一是用了动态申请内存,二是用了cin流读入。很快就定位了原因,还真是这个读入方式导致的。...其实在读入方式上还是有点技巧的,不知你有没有听过一种方式,叫快读,俗称开挂。 03 读入方式 3.1 cin c++常用的方式是用cin\cout进行输入输出,比如像这样。...通过临时看的几篇零散的博客,和多年数据结构和算法的经验,我早就脑补好了一切。 “hashmap啊,这个我研究过,是这样来实现的,不就是数组+链表嘛...” “你们项目spring是咋配置的?”...“哦,我没写过java,不过我搭过demo,不知你说的配置是啥?” 3.2 scanf 那不用c++的流,自然就是用c里面的scanf,这个确实快很多了。...06 总结 今天的小技巧在工作中可能用处不大,但在比赛中可就厉害了呀。不过还是不要轻易开挂,万一平台不支持就玩脱了,哈哈。
网上有人说sizeof是一元操作符,但是我并不这么认为,因为sizeof更像一个特殊的宏,它是在编译阶段求值的。...顺便唧唧歪歪几句,C++中的指针表示实际内存的地址。和C不一样的是,C++中取消了模式之分,也就是不再有small,middle,big,取而代之的是统一的flat。...定义: sizeof是C/C++中的一个操作符(operator)是也,简单的说其作用就是返回一个对象或者类型所占的内存字节数。...输出10 但在没有完全实现C99标准的编译器中就行不通了,上面的代码在VC6中就通不过编译。所以我们最好还是认为sizeof是在编译期执行的,这样不会带来错误,让程序的可移植性强些。 4....含位域结构体的sizeof 前面已经说过,位域成员不能单独被取sizeof值,我们这里要讨论的是含有位域的结构体的sizeof,只是考虑到其特殊性而将其专门列了出来。
Java和C++的区别? 我知道很多人没学过 C++,但是面试官就是没事喜欢拿咱们 Java 和 C++ 比呀!没办法!!!就算没学过C++,也要记下来!...•子类可以用自己的方式实现父类的方法。(以后介绍)。...备注:在JDK8中,接口也可以定义静态方法,可以直接用接口名调用。实现类和实现是不可以调用的。如果同时实现两个接口,接口中定义了一样的默认方法,则必须重写,不然会报错。 抽象类必须要有抽象方法吗?...一般,我们都覆盖 equals() 方法来两个对象的内容相等;若它们的内容相等,则返回 true (即,认为这两个对象相等)。...值,它们也不一定是相等的(不同的对象也可能产生相同的hashcode,概率性问题);•因此,equals 方法被覆盖过,则 hashCode 方法也必须被覆盖•hashCode() 的默认行为是对堆上的对象产生独特值
当输入的样本量足够大时,是会产生哈希冲突的,也就是说不同的输入产生了相同的输出。暂且不谈冲突,就相同的输入能够产生相同的输出这点而言,是及其宝贵的。...一种主流的散列表实现是:用数组作为哈希函数的输出域,输入值经过哈希函数计算后得到哈希值。然后根据哈希值,在数组种找到对应的存储单元。当发生冲突时,对应的存储单元以链表的形式保存冲突的数据。# 二....而令人欣慰的是我们除了 hashCode() 方法,还有一张王牌:equals() 方法。也就是说当两个不相同的对象产生哈希冲突后,我们可以用 equals() 方法进一步判断两个对象是否相同。...- 讲到这里就引出了 Java 程序设计中一个重要原则:**如果两个对象是相等的,它们的 equals() 方法应该要返回 true,它们的 hashCode() 需要返回相同的结果**。...**经过在互联网上一番搜寻,我目前给出的答案是没有。也就是说 hashCode() 仅在散列表中才有用,在其它情况下没用。
领取专属 10元无门槛券
手把手带您无忧上云