随笔分类 - leetcode
摘要:有序数组每个数平方后,不同数字的个数,时间O(n) 空间O(1) (byte) 给你一个有序整数数组,数组中的数可以是正数、负数、零,请实现一个函数,这个函数返回一个整数:返回这个数组所有数的平方值中有多少种不同的取值。举例: nums = {-1,1,1,1}, 那么你应该返回的是:1。因为这个数
阅读全文
摘要:剑指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)
阅读全文
摘要:对递归的理解很浅,经常困在底层递归中,有推荐看sicp前两章的 记录下题目,斐波那契就跳过了 递归函数像是一个黑盒,不要在脑子中思考每一步递归,只需要第一步和最后的return条件,其他中间过程是重复 递归汉诺塔 题目链接 递归 func hanota(A []int, B []int, C []i
阅读全文
摘要:区间合并,区间交集,区间并集等等,数组中一个重复一次,两次相关问题 区间相关 golang 使用Slice便捷排序 func main() { arr:=[][]int{{1,2},{1,3},{1,4},{1,5},{1,6}} //排序 //第一个参数不是slice则panic sort.Sli
阅读全文
摘要:感觉自己二分总是写不对,上下界的寻找出错,在此记录下 先是基本的查找和特殊查找,然后是对二分进行融合的题目 2022.8.9更新 : 全部使用y总模板即可.清晰又好用. y总二分模板和原理,超级好用 相关学习链接 y总二分模板和原理,超级好用 b乎关于二分的讨论 循环带==号的解法,别搞混了 还有这
阅读全文
摘要: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[
阅读全文
摘要:括号相关的大多数用栈和dp,或者左右各自遍历一遍 lt20 合法括号 用栈,遍历string,左半边则入栈,右边则检查栈是否空和栈顶是否匹配。 c++ vector<char>str; bool isValid(string s) { for(int i=0;i<s.size();i++) { if
阅读全文
摘要:背包问题 01背包 每个物品选择一次,选或者不选 dp[i][j] 表示从下标为[0-i]的物品里任意取,放进容量为j的背包,价值总和最大是多少。 dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - weight[i]] + value[i]); //背包容量是减少
阅读全文
摘要:数组重复元素之类问题的整理 lt26 删除排序数组重复项 主要是原地删除,O(1) 空间,很是巧妙 func removeDuplicates(nums []int) int { //O(1)空间复杂 if len(nums)==0{ return 0 } tmp:=0 //不同,tmp+1,放在相
阅读全文
摘要:leetcode 5 最长回文子串 2023.1.16 优化中心扩散的写法 var start,Len int func longestPalindrome(s string) string { //中心扩散记录 start和Len ,而且分为 两种情况,当前点左右扩散和当前和右边的点共同扩散 st
阅读全文
摘要:接雨水 暴力法 直接记录左右最大,最后加上当前节点左右较小的与当前的差 func trap(height []int) int { res:=0 if len(height)==0{ return 0 } lmax:=make([]int,len(height)) rmax:=make([]int,
阅读全文
摘要: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
阅读全文
摘要: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代表
阅读全文
摘要:牛客和leetcode有很多重复 语言时而c++ 时而go 子序列问题 最长递增子序列II 输出arr的最长递增子序列,如果多个,输出字典序最小的。 二分+dp 二分找到对应位置,maxLen记录当前位置i结尾的最长子序列值 后续找最小字典序,从后向前寻找即可。 vector<int> LIS(ve
阅读全文
摘要:计算最小的k个数,除了用堆,还可以用快排 每次返回left right相遇的位置,index>k 则向左搜,index<k 向右搜,直到index==k 剑指40 最小k个数(没要求顺序) golang快排 func getLeastNumbers(arr []int, k int) []int {
阅读全文
摘要:/** * Definition for singly-linked list. * type ListNode struct { * Val int * Next *ListNode * } */ func insertionSortList(head *ListNode) *ListNode {
阅读全文

浙公网安备 33010602011771号