一些算法的思路

281 阅读2分钟

一些算法的思路

反转链表思路

需要三个指针pre反转后的链表头指针一开始为null,pHead当前反转前链表的头指针,next保存当前头指针的下一个元素。用来while循环

递归的话,就是先判断是否pHead为空或pHead.next为空,是直接返回pHead, 否则,递归自己的函数参数为pHead.next这样pHead后面的就全部反转完毕,并赋值给newNode为最后一个节点,之后pHead.next就是反转的后的最后一个元素的next指向pHead,并pHead的next为空。 最后返回newNode

最大连续子序和

用dp[i]表示以A[i]结尾的最长连续子序和。dp[i] = max{A[i], dp[i-1]+A[i]} 遍历过程中还可以获取最大dp【i】值res

数组的三数之和为0

先将排序,之后固定k之后, i,和j往中间移动

各种排序时间表

数组总和,在一个数组中找出可以使数字和为target的组合。

利用dfs的思路

寻找第k大的数,

思想快排加分治,
我们从a中随机找出一个元素作为枢纽元,把数组分为两部分。其中左边元素都不比枢纽元大,右边元素都不比枢纽元小。此时枢纽元所在的位置记为mid。

如果右半边(包括a[mid])的长度恰好为k,说明a[mid]就是需要的第k大元素,直接返回a[mid]。

如果右半边(包括a[mid])的长度大于k,说明要寻找的第k大元素就在右半边,往右半边寻找。

如果右半边(包括a[mid])的长度小于k,说明要寻找的第k大元素就在左半边,往左半边寻找。