摘要:
给定一个链表,判断链表中是否有环。 如果链表中存在某个节点,可以通过连续跟踪next指针再次到达该节点,则链表中存在环。 如果链表中存在环,则返回true,否则返回false。 直接遍历链表,使用set做标记位(标记是否已经到达过) package main import ( "fmt" ) typ 阅读全文
摘要:
总共有n枚硬币,排成阶梯形状,满足第K行有K个硬币。 求形成的完整阶梯行的总行数。 例如n=5时, 1 1 1 1 1 此时完整的阶梯行的总行数为2,因为第3行未排满。 n为一个非负整数,且在32位有符号整型的范围内。 暴力破解 func arrangeCoins(n int)int{ for i: 阅读全文
摘要:
递归 func fibRecursive(n int)int{ if n==0{ return 0 } if n==1{ return 1 } return fibRecursive(n-1) + fibRecursive(n-2) } 动态规划 func fibDynamic(n int)int{ 阅读全文
摘要:
给定一个升序的整数数组numbers,从数组中找出两个数满足: 两数之和等于目标数target,且两个数不能是同一个数, 假设每个输入只对应唯一的答案,不能重复使用同一个元素(下标不能相同)。返回两数的下标。 暴力破解,O(n2) map打标记,O(n),但是空间复杂度也为O(n) 二分查找(对于每 阅读全文
摘要:
给定一个无序的整数数组numbers,从数组中找出两个数满足: 两数之和等于目标数target,且两个数不能是同一个数, 假设每个输入只对应唯一的答案,不能重复使用同一个元素(下标不能相同)。返回两数的下标。 暴力解法 map打标记 package main import ( "fmt" ) fun 阅读全文
摘要:
整形数组nums,在数组中找出由三个数字组成的最大乘积,并输出这个乘积。(乘积不会越界。不考虑超过int的最大值) 重点考察:线性扫描。 暴力破解 先排序 全是正数或全是负数,则nums[length-1]*nums[length-2]*nums[length-3] 有负数有正数,则要么是nums[ 阅读全文
摘要:
递归版牛顿迭代 package main import ( "fmt" ) func newton(n int)int{ if n==0{ return 0 } return int(sqrt(float64(n), float64(n))) } func sqrt(x, n float64)flo 阅读全文
摘要:
不能使用sqrt函数,得到x的平方根的整数部分(x>0)。 package main import "fmt" func mySqrt(x int) int { var left = 0 var right = x for left<=right{ mid := (left+right)/2 if 阅读全文
摘要:
给定一个整数数组nums,编写一个能返回数组中心下标的方法。 中心下标:是数组的一个下标,其左侧所有元素相加的和等于右侧元素相加的和。 如果数组不存在,则返回-1.如果数组存在多个中心下标,返回最靠近左侧的那个。 注意:中心下标可能会出现在数组的两端。 package main import "fm 阅读全文
摘要:
一个有序数组nums,原地删除重复出现的元素,使每个元素只能出现一次,返回删除后数组的新长度。 不能使用额外的数组空间,必须在原地修改输入的数组,并在使用O(1)额外空间的条件下完成(临时变量、指针等) 例如:输入:[0,1,2,2,3,3,3,4] 输出:5 重点考察:双指针算法 package 阅读全文
摘要:
暴力破解 func isPrime(n int) bool{ for i:=2;i*i<=n;i++{ if n%i==0{ return false } } return true } func bf(n int)int{ sum := 0 for i:=2;i<n;i++{ if isPrime 阅读全文
摘要:
给定一个单链表: 1->2->3->4->5, 反转后输出为: 5->4->3->2->1 PrintNodeList输出头节点及后续节点 ReverseNodeList1是迭代的方式 ReverseNodeList2是递归的方式 package main import ( "fmt" ) type 阅读全文