
算法
文章平均质量分 65
我可能是个假开发
hongcaixia
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【算法】双指针
头指针和尾指针,头指针从下标0开始,尾指针从最后一个元素(下标nums.length-1)开始,头指针前进,尾指针后退,直到相遇就是遍历完了;遍历的过程中,每次都取出更大的那个数,存入一个新的数组中,从最后一个下标往前存,因为是非递减的。给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。没有遇到目标元素时所指向的元素(符合的元素),都存入新数组(slow指向)定义一个慢指针slow,用来指向新的数组的元素(删除了目标元素后的)原创 2024-05-03 15:55:32 · 471 阅读 · 0 评论 -
Leetcode02.05:链表求和
思路:因为链表是按照个位十位百位逆序存储的,所以直接顺序遍历链表,第一个就是个位,接着十位,百位等。两个链表的值相加存储作为一个新节点存储,进位信息单独存到一个变量中,每次都加上这个进位信息。给定两个用链表表示的整数,每个节点包含一个数位。编写函数对这两个整数求和,并用链表形式返回结果。这些数位是反向存放的,也就是个位排在链表首部。原创 2024-02-05 18:31:50 · 583 阅读 · 0 评论 -
Leetcode29:两数相除
例如,8.345 将被截断为 8 ,-2.7335 将被截断至 -2。思路:判断乘数b的位数是不是1,通过让他和1进行&运算,如果是1,说明当前位是1。得到的 ^运算结果 和 &运算结果左移 相加就是和,依次执行,直到进位信息没有了,就通过位运算实现了加法。如果两个都为1,那么就会有进位信息,用&运算,得到的就是1,再往左移动一位,结果就是进位信息。&完的结果如果是1,把被乘数a作为要相加的和,左移一位(下一次如果是1的和)。使用^运算(^ : 两个位相同为0,相异为1)的到的结果就是无进位相加的结果。原创 2024-02-14 23:53:01 · 596 阅读 · 0 评论 -
【算法】递归
递归是一种解决计算问题的方法,解决方案取决于同一类问题的更小子集。自己调用自己,如果说每个函数对应着一种解决方案,自己调用自己意味着解决方案是一样的(有规律的)每次调用,函数处理的数据会较上次缩减(子集),而且最后会缩减至无需继续递内层函数调用(子集处理) 完成,外层函数才能算调用完成return;原创 2024-05-19 18:40:26 · 846 阅读 · 0 评论 -
Leetcode24:两两交换链表中的节点
思路:让一个指针指向要交换的两个节点的前一个节点(cur),每次让两个要交换的节点的后一个节点来到cur的后面。cur指针再向前移动两位。直到cur的后一位没有元素(奇数个元素)或者cur的后一位的后一位没有元素(偶数个元素)给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。因为第一个节点没有前一个元素,所以设置一个虚拟头节点,方便第一个元素和后面的元素能走相同的逻辑。原创 2024-02-04 14:27:43 · 572 阅读 · 0 评论 -
【多路递归】汉诺塔&杨辉三角
在经典汉诺塔问题中,有 3 根柱子及 N 个不同大小的穿孔圆盘,盘子可以滑入任意一根柱子。一开始,所有盘子自上而下按升序依次套在第一根柱子上(即每一个盘子只能放在更大的盘子上面)。每次求出的元素缓存到数组中,判断当前要求的数组里是不是有了,如果有了,就直接从数组中拿出来,不用再递归计算了。总结:两片圆盘的移动方法就是最终的移动方法,大于2片的都能拆解成2片的移动方法。从图中可以看出,已知的元素是每一行的第一个元素和最后一个元素都是1;在「杨辉三角」中,每个数是它左上方和右上方的数的和。原创 2024-07-29 11:57:20 · 461 阅读 · 1 评论 -
【算法】二分查找
给你一个按照非递减顺序排列的整数数组nums,和一个目标值target。请你找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值target,返回[-1, -1]。你必须设计并实现时间复杂度为O(log n)的算法解决此问题。// 查找最左侧元素}else{// 查找最右侧元素int i = 0;j = mid -1;}else {// 最左元素}else{//最右元素。原创 2024-05-02 15:26:46 · 976 阅读 · 3 评论 -
Leetcode21:合并两个有序链表
一开始先找出头更小的那个链表作为头节点,依次取出两个指针指向的链表元素,谁小,就改变当前节点的指向,让当前节点始终指向更小的元素。两个指针一直前进,当指向为空时,遍历结束。将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。思路:分别用两个指针遍历两个链表,再用一个指针专门改变链表的指向。原创 2024-02-06 19:38:24 · 640 阅读 · 0 评论 -
【递归与分治】Leetcode23:合并K个升序链表
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。分而治之,分到区间内只有一个链表,合并区间;所以问题就转化为了合并两个有序链表。请你将所有链表合并到一个升序链表中,返回合并后的链表。给你一个链表数组,每个链表都已经按升序排列。原创 2025-01-08 15:22:07 · 358 阅读 · 0 评论 -
【算法】滑动窗口
在算法中,滑动窗口是一种处理连续子数组或子字符串的技术。它通过定义一个固定大小的窗口,使用两个指针,在数组或字符串上移动这个窗口,以便对窗口内的数据进行操作或计算。原创 2024-05-05 19:22:40 · 463 阅读 · 0 评论 -
Leetcode92:反转链表II(区间反转链表)
每次让left后面的节点(cur指针指向的元素)插入到left前面(preHead指针的位置)。即头插法(可以看我上一篇文章的反转链表的第一种解法,只是这里不创建新的节点,而是直接改变前后节点的指针;因为按照3个指针的写法,left位置前面是有一个节点的,但是如果要逆序的就是第一个和第二个,如果没有头节点,preHead就不存在了,就又要特殊处理。请你反转从位置 left 到位置 right 的链表节点,返回 反转后的链表。left和right是索引,但是是从1开始(很无语,,,害我写了好多次才通过)原创 2024-02-03 22:46:22 · 571 阅读 · 0 评论 -
Leetcode206:反转链表
在递归内部的操作把指针的指向改变,为了防止循环引用,在改变完当前节点的指向后,还要把前一个节点的指针指为空。构造一个新链表,从旧链表中取出节点,一个个插入到新链表的头部,最后就逆序了。给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。通过递归调用每次让头指针往后移,即相当于执行了。原创 2024-02-02 12:39:01 · 542 阅读 · 0 评论 -
递归
递归递归:函数的自身调用函数的自身。案例一:计算5的阶乘public class Demo{ public static void main(String[] args) { int result = print(5); System.out.println("结果是:"+ result); } public static int print(int num){ if...原创 2019-02-16 12:40:08 · 243 阅读 · 0 评论