随笔分类 - leetcode
摘要:思路: 这题的意思比较模糊,为什么不能直接复制呢? 浅复制,关系和地址都一样;深复制,关系一样,但地址不一样。 同时因为有一个random指针,它的指向是随机的,因此如果遍历复制就会导致一个问题,如果前面的节点的random指向后面的节点,但后面的节点还没有被创建,此时random就会指向null,
阅读全文
摘要:忙着期末,现在又在实习,太久没刷 leetcode了,今后还会坚持刷下去的。 思路: 这道题不太懂考什么,大概就是先排序,判断第一个是否为1,不为1就减小为1,然后循环到最后一个元素,判断是否相邻元素差值的绝对值是否小于等于1. 代码: class Solution { public: int ma
阅读全文
摘要:思路: 第一次做01背包的题,但这类问题的状态转移方程的核心比较类似,都是 dp[i][j] = max(dp[i-1][j],dp[i-1][j-v[i]]+w[i]),这个状态转移方程可以去看专门的01背包解析获得更好的理解。那么对于01背包问题,更多的是如何转化成01背包的问题来求解,然后就直
阅读全文
摘要:思路: 相当于转化成查找第一个true,直接二分搜索即可。 简单题我重拳出击 代码: // The API isBadVersion is defined for you. // bool isBadVersion(int version); class Solution { public: int
阅读全文
摘要:思路: 基础的链表题,建立一个dummy节点,一个cur指向当前节点用来判断是否等于val的指针,和一个pre指针用来更新删除等于val节点后的链表。 一个while循环,条件是cur不为nullptr即可。 代码: /** * Definition for singly-linked list.
阅读全文
摘要:思路: 今天脑子咋回事。。。这是链表,并不需要在现有链表里合并来保持O(1)的空间复杂度。创建一个新节点来连接也是满足的。 那就创建一个新节点,双指针判断两个链表当前指针指向数字的大小,谁小新节点指谁。 当循环结束时候在判断哪个链表还没有合并完,就用链表再接上为合并完的即可。 /** * Defin
阅读全文
摘要:思路: 这里有一个点必须要清楚,Listnode这个结构体。那么当两个节点相交时,每个链表里的这个节点以及后面的节点是完全一样的,这个“完全一样”包括val,和next所指的节点。在这之前有val相同的节点,但next不相同,所以并不能作为相交的节点。那么根据这个性质,我们只需要存入一个链表到一个查
阅读全文
摘要:思路: 这个题就直接的方法很容易想到,两次遍历,第一次得到正向到n的长度,第二次就找到这个节点即可。 一次遍历的方法能自己想到了,就快慢指针。但是自己想的方法太多边界处理不好了,最后还是使用了题解的方法。 我自己想到的是 每次都用cnt用来计数,当cnt==n的时候就移动慢指针,当快指针为空的时候就
阅读全文
摘要:思路: 这道题,我一开始想用栈存0,然后遇到1就取出来一个0,同时计数,但是这样就有个问题,有可能中间有多个0,后面有多个1只能匹配中间的一部分0,导致得到的子数组不是连续的。 然后就没办法了... 去看题解,当我把0改为-1,那就可以通过前缀和来实现了。这里多提一下前缀和的简单定义吧,前缀和本质是
阅读全文
摘要:思路: 想到了前缀和的方法,但还是没法避免用了两重循环,然后还是超时了。 看了题解也是前缀和,但是他的前缀和求的和我想的有不同,并且还用了hash表来优化。 这里主要问题是我没能想到同余定理,什么是同余定理呢。 举个例子: 23,2,4,6,7.k=6我们知道2,4能够满足条件。那么2,4的求解为前
阅读全文
摘要:思路: 这个题终于能独立想出思路了,就是计算不同类型糖果吃到之前需要吃多少前面的类型的糖果,就是计算前缀和。 举个例子,74538,前缀和为0 7 11 16 19 27,我们这里27是总的数量,是解决边界条件用的。 我们得到前缀和后就可以开始用queries的数据了,我们这里取出favoritet
阅读全文
摘要:思路: 将x和y不断移位和1相与进行判断是否相等,不等加一即可 class Solution { public: int hammingDistance(int x, int y) { int MAX_BIT=30; int res=0; for(int i=0;i<=MAX_BIT;++i){ i
阅读全文
摘要:思路: 暴力,直接超时。问题在于如何解决需要两重循环nums数组和循环判断每个位的不同所耗时间。 如果我们通过每次遍历nums数组的同时位移i位,这样只需要 O(n)的循环,虽然这里有一个i需要递增,但是一个常数,i最大为30. 那么这个方法如何判断汉明距离呢? 我们想 一个数num,他的第i位为
阅读全文
摘要:思路: .....原来我没做过吗..... 4的幂已经说了 n&(n-1)==0 就能过滤掉奇数了,因为二进制每一位都是2的幂,那么剩下的都是为2的幂的偶数了 class Solution { public: bool isPowerOfTwo(int n) { return (n>0)&&((n&
阅读全文
摘要:思路: 哭了,我只想能想到循环,想到位运算也只能想到循环位移。 然后就去看题解了。 题解是使用 判断是否为2的幂的方法,又哭了,我不是写过这个题了吗...... 好吧,那这次就在巩固一次。 用的方法是定义一个常数 用16进制表示就为(0xaaaaaaaa),换成二进制0xa=1010,相当于我4的倍
阅读全文
摘要:思路: 这个题之前做过也写过博客了。 当时的方法是遇到(,就将res字符串存放的字符串放入栈中,遇到)说明一个层次的字符串已经找到,就将当前res的字符串反转,并将栈里的top取出放在原res字符串前面,然后继续遍历s,如果遇到字母就加入res,否则就继续上述步骤,直到遍历完s。之前写的 这次的话用
阅读全文
摘要:思路: 这个题目需要明确的是字符串最长公共前缀,所以如果存在这么的前缀,数组的每个字符串都有这样的前缀,有一个没有这样的前缀就返回空。所以难点是找存在这样的前缀,但要如何找出他最大的长度。 这里我是看到评论用python的特性,他能按照字符串的ASCII码进行排序,所以自己用C实现了一下。 C用so
阅读全文
摘要:思路: 这道题啊,直接通过取余数反转数再对比即可。 代码: class Solution { public: bool isPalindrome(int x) { if(x<0) return false; long a = x; long res = 0; while(a!=0){ res = r
阅读全文
摘要:思路: 虽然说简单题,但如果无法秒杀还是说明基础不好。那我还是太笨了,绕来绕去才找到的了正确方法。 就用一个cur,一个pre,一开始cur指向nullptr,pre指向head,然后进入循环,循环条件就是pre不为nullptr。然后我们需要建立一个临时变量temp存放pre->next。因为我们
阅读全文
摘要:思路: 为什么动规有些规律就是发现不了呢,叹气。 一开始想的方向就错了,想的是用出现次数最多的先打满,然后再用次数第二多的覆盖,在第三的覆盖,但发现如果字母出现的位置不连续就很难做,需要存储一个字母出现的所谓位置,这样就很难实现了。 然后看了题解,发现还是找规律。 首先我们可以发现 ,aba,aba
阅读全文

浙公网安备 33010602011771号