
LeetCode
Ethan Wilson
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
力扣509. 斐波那契数 C++ 空间 O(1) 时间O(n)
【代码】力扣509. 斐波那契数 C++ 空间 O(1) 时间O(n)原创 2022-11-15 11:33:15 · 346 阅读 · 0 评论 -
力扣78 77 46 子集、排列、组合 C++ 回溯法
回溯法求子集原创 2022-10-23 13:05:55 · 531 阅读 · 0 评论 -
力扣190. 颠倒二进制位 C++
采用字符串的方式,每次检查n的最后一位并添加到字符串中,随后n右移1位,最后根据字符串的情况按位权累加class Solution {public: uint32_t reverseBits(uint32_t n) { string num = ""; uint32_t res = 0; while (n != 0) { // 移位前后不相等 说明最后一位是1 if (n >&g原创 2021-12-13 08:15:53 · 728 阅读 · 0 评论 -
力扣191. 位1的个数 C++ 100%时间
如果一个二进制串最后一位是1,那么它右移1位再左移1位就会丢掉这个1,对应的数值也就会小1,那么就可以通过判断移位前后数值是否不变,来判断当前是否丢掉了1个1,如果丢掉了,计数器就+1,然后n右移1位,否则就直接右移,直到n变为0。int hammingWeight(uint32_t n) { int count = 0; while (n != 0) { if (n >> 1 << 1 != n) ++count;原创 2021-12-03 15:57:39 · 176 阅读 · 0 评论 -
力扣204. 计数质数 C++ 埃氏筛
整体思路是埃氏筛 但外层循坏不必到n,而是到√n即可,内层循环则从i^2开始,每次递增i注:在初始化isprime数组时,如果用memset可能会出错int countPrimes(int n) { if (n <= 2) return 0; n--; int count = 0; bool *isprime = new bool[n+1]; for (int i=0; i<n+1; ++i) isprime[i] =原创 2021-12-02 09:33:47 · 424 阅读 · 0 评论 -
力扣198. 打家劫舍 动态规划 C++
第 1 步:状态定义dp[i]:偷到i号屋时 能偷到的最大金额第 2 步:推导状态转移方程dp[i] = nums[i] + maxdp_i_2其中 maxdp_i_2 = max(dp[i - 2], maxdp_i_2)因为偷东西不一定必须只隔一间屋子,隔两间也可以,如果只是按隔一间屋子计算,那么样例2 1 1 2就会出错,因为该例中隔2间屋子偷才能最大化。所以状态转移方程里的第二部分应该是从dp[0]到dp[i-2]里的最大值M,从M的那间屋子开始偷才是最大化金额第 3 步:思考初始化原创 2021-12-02 09:33:03 · 1079 阅读 · 0 评论 -
力扣 495. 提莫攻击 C++
判断下一次中毒时间是否在持续时间内即可,如果在就只累加时间差timeSeries[i + 1] - timeSeries[i],否则就累加durationfor循环在len-1时结束即可,因为最后一次中毒一定会累加duration的时间,所以最后返回sum + durationint findPoisonedDuration(vector<int>& timeSeries, int duration) { int sum = 0; int len = timeSeries.si原创 2021-12-02 09:30:27 · 675 阅读 · 0 评论 -
力扣344.反转字符串 C++ 2行
左右双指针即可void reverseString(vector<char>& s) { for (int left = 0, right = s.size() - 1; left < right; ++left, --right) swap(s[left++], s[right--]);}原创 2021-12-02 09:29:07 · 522 阅读 · 0 评论