一些刷 leetcode 之后想写的一些内容,新手就是爱记录,大佬轻喷。
数学是最好的算法
今天刷 leetcode 每日一题,题面如下:给你一个整数 n ,请你计算以下两个值的最大公约数( GCD ): sumOdd :最小的 n 个正奇数的总和; sumEven :最小的 n 个正偶数的总和;返回 sumOdd 和 sumEven 的 GCD 。 给大伙看看用辗转相除法怎么做。 123456789class Solution {public: int gcd(int x, int y) { return y == 0 ? x : gcd(y, x % y); } int gcdOfOddEvenSums(int n) { return gcd(n * n, n * (n + 1)); }}; 事实上,要是用上 <numeric> 库里自带的 gcd 函数,这道题将会更简单。但是今天分享的重点不在这里,让我们关注一下最后一条语句。学过高中数学的都知道,这是由等差数列求和公式算出来的奇数和和偶数和。具体公式如下: sumOdd=1+3+⋯+(2∗n...
cpp 数组有趣之一
今天刷 leetcode 遇到一个很神奇的问题:给你一个整数数组 nums 和一个整数 k ,请你统计并返回该数组中和为 k 的子数组的个数 ,子数组是数组中元素的连续非空序列。 单看问题本身并不神奇,但是它的题解非常有趣。我把两个题解放在下面,读者不妨猜猜看,哪个题解是官方的能通过的题解。 12345678910111213141516171819202122232425262728293031323334353637383940class Solution {//题解1public: int subarraySum(vector<int>& nums, int k) { const int n = nums.size(); int count = 0; for (int start = 0; start < n; ++start) { int sum = 0; for (int end = st...
评论