首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

四种简单排序算法

最不愿意,就是将写博客或者学习技术变为一项工作或者负担,应该将它们视为生活一种消遣。...你从不曾听人坚持玩了十年电子游戏”,或者“坚持看了十年动漫、电影”、“坚持和心爱女友相处了十年”吧?从来不曾坚持,因为将其视为一个爱好和消遣,就像许多人玩网络游戏一样。...因为这方面的著作很多,所以这里只给出简单描述和实现,供本人及感兴趣朋友参考。我会尽量C#和C++两种语言实现,对于一些不好用C#表达结构,仅用C++实现。...swap()方法则用于交换数组两条记录,也对交换数进行了打印(这里注释掉了,但在测试时可以取消对它们注释)。外层for循环控制变量i表示当前处理第i条记录。...这里要注意分组记录在原数组位置,以第2个分组{14,20}来说,它下标(1,5),所以这两个记录在原数组下标分别为a[1]=14;a[5]=20。

59620

leetcode-49-字母异位词分组(神奇哈希)

在对长度为26vector进行操作前,我们先判断两个字符串长度是否相等,这可以省去很多时间。...如果0,那么没有出现,如果不是0,那么出现。 这个时候我们不用一个个地去循环,去遍历,直接就访问了。 那可不可以同样利用这种方法来处理字母串呢? 答案可以,我们可以哈希表。...哈希表其实就是数组+链表结构,在c++,笔者觉得map这种数据结构可能就是实现了哈希表算法。 哈希表结合了数组快速访问、修改和链表无限长度两个特点,可以参考下面这张图。 ?...左边数组,快速访问和修改,右边链表延伸出去,无限长度。  我们以字母串作为键值,像vector查看数字串一样去判断。...哈希表其实就是我们平时常用vector升级版本,map实现时,既可以实现快速访问,又有好哈希函数,使得空间充足。 神奇神奇~

67110
您找到你想要的搜索结果了吗?
是的
没有找到

字符串常量池,看这篇就够了(二)

哈喽,子牙。十余年技术生涯,一路披荆斩棘从技术小白到技术总监到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可能不同字符串。

47970

程序员C语言C加加新手小白入门基础最容易犯17种错误,你中了几个?

相信这么努力你 已经置顶了 C语言面向过程,而C++面向对象 C和C++区别: C一个结构化语言,它重点在于算法和数据结构。...C程序设计首要考虑如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现过程(事务)控制)。...C++,首要考虑如何构造一个对象模型,让这个模型能够契合与之对应问题域,这样就可以通过获取对象状态信息得到输出实现过程(事务)控制。...所以C与C++最大区别在于它们用于解决问题思想方法不一样。之所以C++比C更先进,是因为“ 设计这个概念已经被融入到C++之中 ”。...C与C++最大区别:在于它们用于解决问题思想方法不一样。之所以C++比C更先进,是因为“ 设计这个概念已经被融入到C++之中 ”,而就语言本身而言,在C更多算法概念。

1.1K50

Java基础八股文第一弹

大家好,大彬~ 春招来啦,今天给大家分享Java基础高频面试题(第一弹),希望小伙伴们看完之后面试稳! Java特点 Java一门面向对象编程语言。...2、继承从已有的类中派生出新类,新类继承父类属性和行为,并能扩展新能力,大大增加程序重用性和易维护性。在Java单继承,也就是一个子类只有一个父类。...当赋值100给Integer时,刚好在这个范围内,所以从cache取对应Integer并返回,所以二次返回同一个对象,所以==比较相等,当赋值200给Integer时,不在cache 范围内...toString:默认输出对象地址。可以重写toString方法,按照重写逻辑输出对象值。 equals:默认比较两个引用变量是否指向同一个对象(内存地址)。...作为一名转码选手,深感这一路不易。希望分享可以帮助更多小伙伴,坑你们不要再踩!

94110

哈希表:哈希值太大了,还是得用set

❝如果哈希值比较少、特别分散、跨度非常大,使用数组就造成空间极大浪费! ❞ 第349题. 两个数组交集 题意:给定两个数组,编写一个函数来计算它们交集。 ?...「说明:」 输出结果每个元素一定是唯一。 我们可以不考虑输出结果顺序。 思路 这道题目,主要要学会使用一种哈希数据结构:unordered_set,这个数据结构可以解决很多类似的问题。...注意题目特意说明:「输出结果每个元素一定是唯一,也就是输出结果去重, 同时可以不考虑输出结果顺序」 这道题暴力解法时间复杂度O(n^2),那来看看使用哈希法进一步优化。...可以发现,貌似数组做哈希表可以解决这道题目,把nums1元素,映射到哈希数组下表上,然后在遍历nums2时候,判断是否出现就可以了。...:multiset底层实现都是红黑树,std::unordered_set底层实现是哈希表, 使用unordered_set 读写效率最高,并不需要对数据进行排序,而且还不要让数据重复,所以选择unordered_set

94430

每日算法系列【LeetCode 面试题 17.05】字母与数字

题目描述 给定一个放有字符和数字数组,找到最长数组,且包含字符和数字个数相同。 返回该子数组,若不存在这样数组,返回一个空数组。...那道题要求是否含有总和为 整数倍连续子数组。而本题要求最长数组,满足数字和字母个数相等。 我们可以把字母抽象成 ,数字抽象成 ,那么子数组总和含义就是数字个数与字母个数差值。...假设子数组 满足字母个数和数字个数相等,那么这段子数组总和必然 。如果我们前缀和来进行优化的话, ,也就是相等。...所以我们只需要求一遍前缀和,如果 没有在之前出现,那就保存一下 最开始出现下标 。否则的话就看一下当前子数组长度 和历史最优长度 谁大,然后决定更不更新。...实际实现 c++ 还是可以采用 unordered_map 来当作哈希表保存下标。 时间复杂度

52510

哈希值太大了,还是得用set

两个数组交集 https://leetcode-cn.com/problems/intersection-of-two-arrays/ 题意:给定两个数组,编写一个函数来计算它们交集。 ?...说明:输出结果每个元素一定是唯一。我们可以不考虑输出结果顺序。 思路 这道题目,主要要学会使用一种哈希数据结构:unordered_set,这个数据结构可以解决很多类似的问题。...注意题目特意说明:输出结果每个元素一定是唯一,也就是输出结果去重, 同时可以不考虑输出结果顺序 这道题暴力解法时间复杂度O(n^2),那来看看使用哈希法进一步优化。...那么数组来做哈希表也是不错选择,例如242. 有效字母异位词 但是要注意,使用数组来做哈希题目,是因为题目都限制了数值大小。 而这道题目没有限制数值大小,就无法使用数组来做哈希表了。...::multiset底层实现都是红黑树,std::unordered_set底层实现是哈希表, 使用unordered_set 读写效率最高,并不需要对数据进行排序,而且还不要让数据重复,所以选择

46820

【Java面试系列】Java 基础常问面试题

1、面向对象和面向过程区别 面向过程: 分析解决问题步骤,然后用函数把这些步骤一步一步地实现,然后在使用时候一一调 则可。性能较高,所以单片机、嵌入式开发等一般采用面向过程开发。...另外需要注意: Object hashcode 方法本地方法,也就是 c 语言或 c++ 实现,该方法通常用来将对象 内存地址 转换为整数之后返回。...如果两个对象相等,则 hashcode 一定也是相同两个对象相等,对两个对象分别调用 equals 方法都返回 true。但是,两个对象有相同 hashcode 值,它们也不一定是相等 。...如果没有重写 hashCode(),则该 class 两个对象无论如何都不会相等(即使这两个对象指向相同数据) 为什么两个对象有相同 hashcode 值,它们也不一定是相等?...--- 欢迎关注公众号 山间木匠 , 小春哥,从事 Java 后端开发,会一点前端、通过持续输出系列技术文章以文会友,如果本文能为您提供帮助,欢迎大家关注、 点赞、分享支持,我们下期再见!

57740

字符串:KMP算法还能干这个!

思路 这又是一道标准KMP题目。 我们在字符串:都来看看KMP看家本领!里提到了,在一个串查找是否出现另一个串,这是KMP看家本领。 那么寻找重复子串怎么也涉及到KMP算法了呢?...这里就要说一next数组了,next 数组记录就是最长相同前后缀( 字符串:听说你对KMP有这些疑问?...最长相等前后缀长度为:next[len - 1] + 1。 数组长度为:len。...然后通过字符串:都来看看KMP看家本领!讲解一道KMP经典题目,判断文本串里是否出现模式串,这里涉及到构造next数组代码实现,以及使用next数组完成模式串与文本串匹配过程。...又给出了详细讲解。 在留言区留下你思路吧! -------end------- 程序员Carl,哈工大师兄,先后在腾讯和百度从事技术研发多年,利用工作之余重刷leetcode。

57440

公司数据结构+算法面试100题

一种算法使通用字符串相匹配。   ★颠倒一个字符串。优化速度。优化空间。   ★颠倒一个句子顺序,比如将“叫克丽丝”转换为“克丽丝叫我”, 实现速度最快,移动最少。   ...链表结点定义如下:  struct ListNode { int m_nKey; ListNode* m_pNext; }; 第14题(数组): 题目:输入一个已经按升序排序数组和一个数字, 在数组查找两个数...例如:输入两个字符串BDCABA和ABCBDAB,字符串BCBA和BDAB都是它们最长公共子串, 则输出它们长度4,并打印任意一个子串。...因此这道题实质上要求我们两个栈来实现一个队列。...题目:输入一个正整数数组,将它们连接起来排成一个数,输出能排出所有数字中最小一个。 例如输入数组{32, 321},则输出两个能排成最小数字32132。 请给出解决问题算法,并证明该算法。

3.2K90

巧借C++算法实现冒泡排序(旧题新说)

冒泡排序算法原理再来回顾一下冒泡排序这款经典算法原理,冒泡排序算法核心思想通过多次遍历待排序序列,每次比较相邻两个元素,如果它们顺序不正确,则交换它们位置。...具体原理流程图如下所示:具体实现步骤接下来看看核心实现步骤,其实借助C++语言实现冒泡排序步骤只需五步,具体使用C++语言实现冒泡排序步骤如下所示:首先需要定义一个待排序数组,并确定数组长度;...其中n待排序序列长度,再加上冒泡排序算法每次只交换相邻元素,所以冒泡排序一种稳定排序算法,相等元素相对位置在排序后都不会改变,这是一个非常棒优点。...优化可能性再来聊一个比较有深度的话题,关于C++实现冒泡排序优化。虽然冒泡排序算法简单易懂,但在实际应用,它效率相对较低,尤其对于大规模数据排序,冒泡排序性能不够理想,甚至性能较差。...而且应该大家也学到了冒泡排序一种简单但有效排序算法,尤其原理,通过多次比较和交换相邻元素方式实现序列排序,经过学习冒泡排序算法,我们可以深入理解排序算法工作原理,并在实际应用灵活运用。

24431

数组重复数字

题目描述 在一个长度为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

2K30

算法:搜索

:由于序列一个有序序列,可以利用该性质,设置左右两个节点,每次取中间值与之进行比较,如果大于中间值,表明位于右半部分,如果小于中间值,表明位于左半部分,如果相等,则返回下标,时间复杂度为。...整数数组 nums 按升序排列,数组值 互不相同 。...:如果根节点具有左右节点,判断二者元素是否相等,如果相等,递归判断左右节点情况,同步移动两个指针遍历树,p指针左移,q指针右移,每次检测当前p和q节点值是否相等,如果相等再判断左右子树是否对称 迭代方式...每次提取两个结点并比较它们值(队列两个连续结点应该是相等,而且它们子树互为镜像),然后将两个结点左右子结点按相反顺序插入队列。...当队列为空时,或者检测到树不对称(即从队列取出两个相等连续结点)时,该算法结束。

57630

什么 Java Unsafe 与 CAS ?

从第一行描述可以了解到 Unsafe 提供了硬件级别的操作,比如获取某个属性在内存位置,比如修改对象字段值,即使它是私有的。...举两个例子,比方: public native long staticFieldOffset(Field paramField); 这个方法可以用来获取给定 paramField 内存地址偏移量,...); 前一个方法用来获取数组第一个元素偏移地址,后一个方法用来获取数组转换因子即数组中元素增量地址。...当然这需要有一定 C/C++ 基础,对内存分配有一定了解,这也是为什么一直认为 C/C++ 开发者转行做 Java 会有优势原因。...2、valueOffset 表示变量值在内存偏移地址,因为 Unsafe 就是根据内存偏移地址获取数据原值。 3、value volatile 修饰,这是非常关键

1K40

一文理清 Go 引用常见疑惑

如下代码输出它们地址: 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 引用。

49430

刷题老超时?那是因为你不会开挂

这次实现里面可能会比较耗时点:一用了动态申请内存,二用了cin流读入。很快就定位了原因,还真是这个读入方式导致。...其实在读入方式上还是有点技巧,不知你有没有听过一种方式,叫快读,俗称开挂。 03 读入方式 3.1 cin c++常用方式cin\cout进行输入输出,比如像这样。...通过临时看几篇零散博客,和多年数据结构和算法经验,早就脑补好了一切。 “hashmap啊,这个研究这样来实现,不就是数组+链表嘛...” “你们项目spring咋配置?”...“哦,没写过java,不过demo,不知你配置啥?” 3.2 scanf 那不用c++流,自然就是c里面的scanf,这个确实快很多了。...06 总结 今天小技巧在工作可能用处不大,但在比赛可就厉害了呀。不过还是不要轻易开挂,万一平台不支持就玩脱了,哈哈。

43610

C++学习笔记---------基础知识sizeof用法

网上有人sizeof一元操作符,但是并不这么认为,因为sizeof更像一个特殊宏,它是在编译阶段求值。...顺便唧唧歪歪几句,C++指针表示实际内存地址。和C不一样C++取消了模式之分,也就是不再有small,middle,big,取而代之统一flat。...定义: sizeofC/C++一个操作符(operator)也,简单其作用就是返回一个对象或者类型所占内存字节数。...输出10 但在没有完全实现C99标准编译器中就行不通了,上面的代码在VC6就通不过编译。所以我们最好还是认为sizeof在编译期执行,这样不会带来错误,让程序可移植性强些。 4....含位域结构体sizeof 前面已经,位域成员不能单独被取sizeof值,我们这里要讨论含有位域结构体sizeof,只是考虑到其特殊性而将其专门列了出来。

53710

12道囊括重要东西 Java 基础问题

Java和C++区别? 知道很多人没学过 C++,但是面试官就是没事喜欢拿咱们 Java 和 C++ 比呀!没办法!!!就算没学过C++,也要记下来!...•子类可以自己方式实现父类方法。(以后介绍)。...备注:在JDK8,接口也可以定义静态方法,可以直接接口名调用。实现类和实现是不可以调用。如果同时实现两个接口,接口中定义了一样默认方法,则必须重写,不然会报错。 抽象类必须要有抽象方法吗?...一般,我们都覆盖 equals() 方法来两个对象内容相等;若它们内容相等,则返回 true (即,认为这两个对象相等)。...值,它们也不一定是相等(不同对象也可能产生相同hashcode,概率性问题);•因此,equals 方法被覆盖,则 hashCode 方法也必须被覆盖•hashCode() 默认行为对堆上对象产生独特值

52830

面试点:Java hashCode() 和 equals() 关系

当输入样本量足够大时,会产生哈希冲突,也就是不同输入产生了相同输出。暂且不谈冲突,就相同输入能够产生相同输出这点而言,及其宝贵。...一种主流散列表实现是:数组作为哈希函数输出域,输入值经过哈希函数计算后得到哈希值。然后根据哈希值,在数组种找到对应存储单元。当发生冲突时,对应存储单元以链表形式保存冲突数据。# 二....而令人欣慰我们除了 hashCode() 方法,还有一张王牌:equals() 方法。也就是两个不相同对象产生哈希冲突后,我们可以 equals() 方法进一步判断两个对象是否相同。...- 讲到这里就引出了 Java 程序设计中一个重要原则:**如果两个对象是相等它们 equals() 方法应该要返回 true,它们 hashCode() 需要返回相同结果**。...**经过在互联网上一番搜寻,目前给出答案没有。也就是 hashCode() 仅在散列表才有用,在其它情况下没用。

47120
领券