随笔分类 -  leetcode

摘要:有序数组每个数平方后,不同数字的个数,时间O(n) 空间O(1) (byte) 给你一个有序整数数组,数组中的数可以是正数、负数、零,请实现一个函数,这个函数返回一个整数:返回这个数组所有数的平方值中有多少种不同的取值。举例: nums = {-1,1,1,1}, 那么你应该返回的是:1。因为这个数 阅读全文
posted @ 2022-06-07 14:58 海拉尔 阅读(138) 评论(0) 推荐(0)
摘要:剑指offer62 约瑟夫环 f(n,m) = (f(n-1,m)+m)%n func lastRemaining(n int, m int) int { //反复计算下标在上层的下标位置 //例如 0,1,2,3 n=4,m=2,第一次去除1后剩余2,3,0 2的位置下标0在上层的下标为(0+m) 阅读全文
posted @ 2022-03-16 22:18 海拉尔 阅读(57) 评论(0) 推荐(0)
摘要:对递归的理解很浅,经常困在底层递归中,有推荐看sicp前两章的 记录下题目,斐波那契就跳过了 递归函数像是一个黑盒,不要在脑子中思考每一步递归,只需要第一步和最后的return条件,其他中间过程是重复 递归汉诺塔 题目链接 递归 func hanota(A []int, B []int, C []i 阅读全文
posted @ 2021-09-18 20:48 海拉尔 阅读(85) 评论(0) 推荐(0)
摘要:区间合并,区间交集,区间并集等等,数组中一个重复一次,两次相关问题 区间相关 golang 使用Slice便捷排序 func main() { arr:=[][]int{{1,2},{1,3},{1,4},{1,5},{1,6}} //排序 //第一个参数不是slice则panic sort.Sli 阅读全文
posted @ 2021-09-08 23:46 海拉尔 阅读(62) 评论(0) 推荐(0)
摘要:感觉自己二分总是写不对,上下界的寻找出错,在此记录下 先是基本的查找和特殊查找,然后是对二分进行融合的题目 2022.8.9更新 : 全部使用y总模板即可.清晰又好用. y总二分模板和原理,超级好用 相关学习链接 y总二分模板和原理,超级好用 b乎关于二分的讨论 循环带==号的解法,别搞混了 还有这 阅读全文
posted @ 2021-08-22 12:24 海拉尔 阅读(239) 评论(0) 推荐(0)
摘要:lt66 加一 数组加一 func plusOne(digits []int)[]int { if len(digits)==0{ return []int{} } for i:=len(digits)-1;i>=0;i--{ //不等于9则加1返回 if digits[i]!=9{ digits[ 阅读全文
posted @ 2021-04-20 14:28 海拉尔 阅读(39) 评论(0) 推荐(0)
摘要:括号相关的大多数用栈和dp,或者左右各自遍历一遍 lt20 合法括号 用栈,遍历string,左半边则入栈,右边则检查栈是否空和栈顶是否匹配。 c++ vector<char>str; bool isValid(string s) { for(int i=0;i<s.size();i++) { if 阅读全文
posted @ 2021-04-03 23:53 海拉尔 阅读(121) 评论(0) 推荐(0)
摘要:背包问题 01背包 每个物品选择一次,选或者不选 dp[i][j] 表示从下标为[0-i]的物品里任意取,放进容量为j的背包,价值总和最大是多少。 dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - weight[i]] + value[i]); //背包容量是减少 阅读全文
posted @ 2021-02-08 11:23 海拉尔 阅读(128) 评论(0) 推荐(0)
摘要:数组重复元素之类问题的整理 lt26 删除排序数组重复项 主要是原地删除,O(1) 空间,很是巧妙 func removeDuplicates(nums []int) int { //O(1)空间复杂 if len(nums)==0{ return 0 } tmp:=0 //不同,tmp+1,放在相 阅读全文
posted @ 2021-02-05 13:07 海拉尔 阅读(69) 评论(0) 推荐(0)
摘要:leetcode 5 最长回文子串 2023.1.16 优化中心扩散的写法 var start,Len int func longestPalindrome(s string) string { //中心扩散记录 start和Len ,而且分为 两种情况,当前点左右扩散和当前和右边的点共同扩散 st 阅读全文
posted @ 2021-02-04 15:39 海拉尔 阅读(89) 评论(0) 推荐(0)
摘要:接雨水 暴力法 直接记录左右最大,最后加上当前节点左右较小的与当前的差 func trap(height []int) int { res:=0 if len(height)==0{ return 0 } lmax:=make([]int,len(height)) rmax:=make([]int, 阅读全文
posted @ 2021-02-04 15:38 海拉尔 阅读(54) 评论(0) 推荐(0)
摘要:lt33 搜索旋转数组 找到target下标,不在则返回-1 func search(nums []int, target int) int { //边界判断 if len(nums)==0{ return -1 } l:=0 r:=len(nums)-1 for l<=r{ mid:=l+(r-l 阅读全文
posted @ 2021-02-04 14:29 海拉尔 阅读(52) 评论(0) 推荐(0)
摘要:lt198 打家劫舍I [1,2,3,1] 相邻不能偷 dp 记录最大 func rob(nums []int) int { n:=len(nums) //注意边界值,0个返回0,一个返回最初值 if n<=0{ return 0 } if n==1{ return nums[0] } //dp代表 阅读全文
posted @ 2021-02-04 14:25 海拉尔 阅读(73) 评论(0) 推荐(0)
摘要:牛客和leetcode有很多重复 语言时而c++ 时而go 子序列问题 最长递增子序列II 输出arr的最长递增子序列,如果多个,输出字典序最小的。 二分+dp 二分找到对应位置,maxLen记录当前位置i结尾的最长子序列值 后续找最小字典序,从后向前寻找即可。 vector<int> LIS(ve 阅读全文
posted @ 2021-01-31 11:49 海拉尔 阅读(87) 评论(0) 推荐(0)
摘要:计算最小的k个数,除了用堆,还可以用快排 每次返回left right相遇的位置,index>k 则向左搜,index<k 向右搜,直到index==k 剑指40 最小k个数(没要求顺序) golang快排 func getLeastNumbers(arr []int, k int) []int { 阅读全文
posted @ 2021-01-29 10:48 海拉尔 阅读(173) 评论(0) 推荐(0)
摘要:/** * Definition for singly-linked list. * type ListNode struct { * Val int * Next *ListNode * } */ func insertionSortList(head *ListNode) *ListNode { 阅读全文
posted @ 2021-01-07 14:29 海拉尔 阅读(135) 评论(0) 推荐(0)