文章 32
评论 338
浏览 51829
日刷leetcode--简单版(六)

日刷leetcode--简单版(六)

返回总目录 日刷leetcode–简单版 167. 两数之和 II - 输入有序数组 题目描述 解题思路 定义双指针,分别在头部与尾部 判断两个的和是否与targent相等,相等级返回,比 sum 大则尾指针前移,反之头指针后移 示例代码 func twoSum(numbers []int, target int) []int { l, r := 0, len(numbers)-1 for l < r { sum := numbers[l] + numbers[r] if sum == target { return []int{l + 1, r + 1} } if sum < target { l++ } else { r-- } } return []int{-1, -1} } 运行结果 执行用时 :4 ms, 在所有 golang 提交中击败了 97.30% 的用户 内存消耗 :3 MB, 在所有 golang 提交中击败了 68.38% 的用户

GO实现一个单链表

GO实现一个单链表

不多 BB,直接上代码,有关链表定义,请自行百度 package main import "fmt" type ListNode struct { Val interface{} Next *ListNode } // 初始化 func New() *ListNode { return &ListNode{nil, nil} } // 遍历输出 func (head *ListNode) Traverse() { point := head fmt.Println("--------start----------") for nil != point { fmt.Println(point.Val) point = point.Next } fmt.Println("--------end----------") } // 插入 func (head *ListNode) Insert(val int) { p := head for p.Next != nil { p = p.Next // 位移至尾节点 } s := &ListNode{Val: val} p.N....

日刷leetcode--简单版(五)

日刷leetcode--简单版(五)

返回总目录 日刷leetcode–简单版 119. 杨辉三角 II 题目描述 解题思路 此题与 118 类似,直接冲 118 中返回最后一个数组即可,但是要优化到 O(k)就显得不是那么容易了 公式: 简单的来说就是前面的数乘以一个分数,这个分数从左到右分别为 n/1, (n-1)/2, ..., 2/(n-1), 1/n,比如第 3 行就是分别乘以 3/1,2/2,1/3 这里要注意的是[1]是第 0 行,而非第一行 示例代码 func getRow(rowIndex int) []int { arr := make([]int,rowIndex+1) if rowIndex == 0{ return arr } arr[0] = 1 for i:= 1; i <= rowIndex; i++ { arr[i] = arr[i-1] * (rowIndex-i+1)/i } return arr } 运行结果 执行用时 :0 ms, 在所有 Go 提交中击败了 100.00% 的用户 内存消耗 :2 MB, 在所有 Go 提交中击败了 90.24% 的用户 121....

日刷leetcode--简单版(四)

日刷leetcode--简单版(四)

返回总目录 日刷leetcode–简单版 88. 合并两个有序数组 题目描述 解题思路 采用双指针,从前往后,如果 nums2 中当前值小于 nums1 中的值,这插入并后移 示例代码 func merge(nums1 []int, m int, nums2 []int, n int) []int { if n == 0 { return nums1 } i, j := 0, 0 for ; i < len(nums1) && j < n; i++ { if nums1[i] > nums2[j] { reverses(nums1[i:]) nums1[i] = nums2[j] j++ } else { continue } } for j < n { nums1[m+j] = nums2[j] j++ } return nums1 } func reverses(nums []int) { for i := len(nums) - 1; i > 0; i-- { nums[i] = nums[i-1] } } 运行结果 执行....

日刷leetcode--简单版(三)

日刷leetcode--简单版(三)

返回总目录 日刷leetcode–简单版 58. 最后一个单词的长度 题目描述 解题思路 定义一个变量统计,从前往后遍历,遇到空格归零就可以了,注意处理最后几个个字符全为空格的情况 定义一个变量统计,从后往前便利,虽然时间复杂度同为 O(n),但是第二个明显快很多 示例代码 func lengthOfLastWord(s string) int { var count int for i:= len(s)-1; i >= 0; i-- { if s[i] == 32{ if count == 0 { continue }else{ break } } count ++ } return count } 运行结果 执行用时 :0 ms, 在所有 Go 提交中击败了 100.00% 的用户 内存消耗 :2.2 MB, 在所有 Go 提交中击败了 39.13% 的用户 66.加一 题目描述 解题思路 从后面往前面循环,最后以一位加 1 即可,处理好末尾9与999 func plusOne(digits []int) []int { c := 1 // 定义一个变量用....

算法的时间复杂度计算

算法的时间复杂度计算

写在前面    时间复杂度与空间复杂度直接决定着一个算法的好坏,而大多时候在设计算法是时间复杂度要优先于空间复杂度。 时间复杂度是什么(以下内容来着维基百科) 在计算机科学中,算法的时间复杂度(Time complexity)是一个函数,它定性描述该算法的运行时间。这是一个代表算法输入值的字符串的长度的函数。时间复杂度常用大O符号表述,不包括这个函数的低阶项和首项系数。使用这种方式时,时间复杂度可被称为是渐近的,亦即考察输入值大小趋近无穷时的情况。例如,如果一个算法对于任何大小为 n (必须比 n0 大)的输入,它至多需要 5n3 + 3n 的时间运行完毕,那么它的渐近时间复杂度是 O(n3)。 为了计算时间复杂度,我们通常会估计算法的操作单元数量,每个单元运行的时间都是相同的。因此,总运行时间和算法的操作单元数量最多相差一个常量系数。 相同大小的不同输入值仍可能造成算法的运行时间不同,因此我们通常使用算法的最坏情况复杂度,记为 T(n) ,定义为任何大小的输入 n 所需的最大运行时间。另一种较少使用的方法是平均情况复杂度,通常有特别指定才会使用。时间复杂度可以用函数 T(n) 的自....

日刷leetcode--简单版(二)

日刷leetcode--简单版(二)

返回总目录 日刷leetcode–简单版 26. 删除排序数组中的重复项 题目描述 给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。 示例 1: 给定数组 nums = [1,1,2], 函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。 你不需要考虑数组中超出新长度后面的元素。 示例 2: 给定 nums = [0,0,1,1,1,2,2,3,3,4], 函数应该返回新的长度 5, 并且原数组 nums 的前五个元素被修改为 0, 1, 2, 3, 4。 你不需要考虑数组中超出新长度后面的元素。 说明: 为什么返回数值是整数,但输出的答案是数组呢? 请注意,输入数组是以“引用”方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。 你可以想象内部操作如下: // nums 是以“引用”方式传递的。也就是说,不对实参做任何拷贝 int len = removeDuplicates(nums); // ....

日刷leetcode--简单版系列(目录篇)

日刷leetcode--简单版系列(目录篇)

前言 谨以此贴记录我刷题的过程,那么我为啥要刷题呢 熟悉各互联网公司的算法题目,为找工作做准备。 复习以前学过的编程语言,LeetCode 支持几乎所有主流编程语言,大家可以用不同语言来做题。 熟悉常见的算法和数据结构,LeetCode 提供了交流平台,一些大神会将自己的解法贴出来共享,有些巧妙的解法实在令人叫绝,虽然几乎都是英文,但上面的国人也特别多(中文拼音名字 >_<)。 学习别人的编程思维,加快编程的速度,避免常见的 BUG。 以上内容摘抄自网络,纯属瞎说,真是的原因是: 因为上班工作做完后,不敢明目张胆的摸鱼 下班无聊不想打游戏 算法真的很弱 ...... 时过境迁,上次打开 leetcode 的时候还没有中文版,而现在已经有了--力扣。 由于篇幅的问题,我觉得 5 题一篇,话不多说。 目录: 日刷leetcode--简单版系列(一) 日刷leetcode--简单版系列(二) 日刷leetcode--简单版系列(三) 日刷leetcode--简单版系列(四) 日刷leetcode--简单版系列(五) 日刷leetcode--简单版系列(六)

日刷leetcode--简单版(一)

日刷leetcode--简单版(一)

返回总目录 日刷leetcode--简单版 1.两数之后 题目描述 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。 示例 给定 nums = [2, 7, 11, 15], target = 9 因为 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1] 解题思路 1 暴力法,双循环相加结果等于 target 就返回 示例代码 func twoSum(nums []int, target int) []int { for i := 0; i < len(nums); i++ { for j := i + 1; j < len(nums); j++ { if nums[i] + nums[j] ==target { return []int{i,j} } } } return nil } 运行结果 执行用时 :56 ms, 在所有 Go 提交中击败了 32.33% 的用户 内存....

凡打不倒我的,必使我强大!!!—— 墨殇的技术博客