- 博客(15)
- 收藏
- 关注
原创 算法:字符串解码
2、出栈时如果遇到第一个【,停止出栈,此时,出栈的数据里面就是第一个需要处理的数据。3、处理完之后重新入栈,入栈之后继续对原有数据的剩余数据入栈,循环第一步。1、使用栈linkedlist保存数据,压栈直到遇到第一个】,然后出栈。使用入栈出栈对具有重复特性且内部具有嵌套性质的元数据进行处理。注意事项:循环条件,数字的判断。
2023-10-11 00:48:40 29
原创 算法:链表中倒数第k个节点
算法思想:使用差值指针,指针A指向头节点 指针B指向k-1节点 当B指针指向尾节点时,指针A就指向了n-(k-1)节点,也就是倒数第k个节点,快慢指针、差值指针在对有共同数据或者同一个数据集操作时有很大作用。其中还有边界条件:指针指到末尾时的next为空也很重要。
2023-10-10 02:17:00 23 1
原创 算法:回文链表
2、慢指针.next开始反转链表,反转之后进行比较,此时会忽略中间节点。数学:快慢指针为1和2,2走到头之后1肯定在正中间或者偏右(偶数),此时可进行反转链表,之后比较即可。1、快指针指向最后一个节点,慢指针指向n/2;1、快指针指向空时,慢指针指向n/2+1;2、慢指针反转链表,反转之后进行比较。快慢指针,类似环形链表,针对同一数据,使用快慢指针操作。
2023-10-10 01:49:59 34 1
原创 算法:相交链表
使用指针,相当于单指针指向两个链表,即使在指针指向空之前,两个指针没有相遇,在重新指向交点时,两个指针必然相遇。分别计算两个链表的长度,指针A放在短链表头部,指针B指向长链表长度差的偏移量部,同时移动,则必定在交点相遇。数学思想: x+y-b=y+x-b x、y为两个链表的长度,b为交点后的链表长度。算法思想:不同数据集可先比较通用属性,找出差异,使用指针消除差异。算法思想:指针、具有相同数据的两个数据集可参考。
2023-10-10 01:25:20 27 1
原创 算法:找到数组中消失的数字
主要思想:单一数组操作,使用下标保存对应数字,用下标对应的数组值保存状态(这个状态是指通过修改数组值超出数组范围),以状态确定数字是否存在,如果修改了某一数组值,说明对应的下标已经存在,另一种形式的键值对数组,简单数据问题可以注意一下。2、重新遍历,如果查询到int[i]的值不在数组范围之内时,就说明i已经存在了。1、遍历数组,找到int[i]的值a,将a下标对应的值修改到数组容量数据之外。
2023-10-10 00:22:52 32 1
原创 算法:移动0
3、相当于把不为0的数,一个个的赋值到对应索引,为0时不操作。3、退出循环之后,可以直接将length-j,length范围内的下标赋值为0。1、当i值不为0时,把i值赋值给j索引。4、最后j的值即为不为0的个数。利用双指针一步步往前挪的想法很重要,指针1循环数组,指针2保存挪动去往的索引;对一个数组[5,0,9,5,0,8]修改为[5,9,5,8,0,0]两步:把不为0的数一个一个往前挪,给后面的数赋值0;1、单循环i,外部定义j=0。
2023-10-10 00:00:42 18 1
原创 算法:合并两个顺序数组
1、遍历合并,使用Arrays.sort(),代码简单 速度慢 算法中只要提到数组排序,首先就要想到Arrays.sort。3、尾部比较法, 快,内存占用少,注意插入位置和顺序,以及终止条件。2、使用中间数组,头部比较法,使用中间数组,代码稍复杂,快。两个顺序数组,合并并重新排序,数组1预存空间给数组2。
2023-10-09 23:38:06 34
原创 算法:两数之和
以x为key到map集合找对象,找不到则说明没有,找到则成功,找到的值则为对应的数组下标。. 利用map查询快且能保存索引的优点 ,数组值=key 数组下标=value。创建一个map集合,key为数组中的值,value为对应的下标。求一个数组[1,2,3,4]中两个数之和为6的数组下标。对数组只进行一次循环,相对暴力算法O(拿目标数据—当前数组值=x;),减少时间复杂度 O(n);
2023-10-09 23:19:23 12 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人