
算法与数据结构
litchi9854
这个作者很懒,什么都没留下…
展开
-
leetcode53-求最大子序和
解题思路 题干要求可知,该子集为连续的数组元素构成,不存在任意组合的情形 采用累加法,从第0个元素开始遍历累加,当累加到第n个元素时,若累加和小于0,则取第n+1个元素的值作为新的累加和 每次累加后都比较sum与res的大小,取其中最大值作为累计值,以免在后续遍历元素并累计的过程中被覆盖 代码 func maxSubArray(nums []int) int { res := nums[0] sum :=0 for _, num := range nums { i原创 2020-08-11 00:46:05 · 221 阅读 · 0 评论 -
leetcode2-两数(链表)相加
构建链表:先建链表头head,再建链表尾巴(引用传递)tail:=head /** * Definition for singly-linked list. * type ListNode struct { * Val int * Next *ListNode * } */ func addTwoNumbers(l1 *ListNode,l2 *ListNode) *ListNode{ dummy := new(ListNode) curr := dummy carry :原创 2020-08-09 17:26:36 · 216 阅读 · 0 评论 -
leetcode106-根据中序和后续遍历构建二叉树
根据中序和后续遍历构建二叉树 中序遍历:左子树,根节点,右子树 后序遍历: 左子树,右子树,根节点 代码 /** * Definition for a binary tree node. * type TreeNode struct { * Val int * Left *TreeNode * Right *TreeNode * } */ func buildTree(inorder []int, postorder []int) *TreeNode { if len原创 2020-08-09 17:16:55 · 245 阅读 · 0 评论 -
leetcode-不同的排序算法及其运行时间
解题思路 排序方法 运行时间 库函数排序 8ms 类选择排序 208ms 冒泡排序 204ms 堆排序 4ms 代码 func findKthLargest(nums []int, k int) int { // 库函数排序 //sort.Ints(nums) // 类选择排序 /*for i:=0;i<len(nums);i++{ for j:=i+1;j<len(nums);j++{ if原创 2020-08-05 10:30:40 · 323 阅读 · 0 评论 -
leetcode105-Golang根据前序遍历与中序遍历构建二叉树
Golang根据前序遍历与中序遍历构建二叉树 执行用时:4 ms, 在所有 Go 提交中击败了95.86%的用户 内存消耗:3.9 MB, 在所有 Go 提交中击败了81.48%的用户 解题思路 前序遍历:根节点,左子树,右子树; 数组第一个元素必定是root节点 中序遍历:左子树,根节点,右子树; 利用前序遍历中找到的root节点在中序遍历中找到其对应的索引index,该index即是左子树长度 切割遍历数组: (左子树的前序遍历,左子树的中序遍历), (右子树的前序遍历,右子树的中序遍历) 递归 代原创 2020-08-04 09:12:12 · 486 阅读 · 0 评论 -
Golang实现二分查找算法
二分查找范例模板 1. 寻找目标值 func binarySearch(arr []int, target int) int{ // 搜索区间 [left, right] left := 0 // 数组左边界的下标index right := len(arr)-1 // 数组右边界的下标index // 循环条件,左边界小于等于右边界 for left <= right{ mid := left+(right-left)>>1 // mid值大于目标值,右边界向原创 2020-07-31 16:06:44 · 522 阅读 · 0 评论