随笔分类 -  leetcode-数组

摘要:题目: 解答: 方法一:累计求和 为了获得长度为 k的子数组的平均值,我们需要知道这 k个元素之和。使用 sum记录数组的累加和,sum[i]存储从第一个元素到第 i个元素之和。该数组只需要计算一次。 在数组 sum中,原数组索引从 i到 i+k的元素之和为 sum[i] - sum[i-k]。按照 阅读全文
posted @ 2020-05-04 18:21 梦醒潇湘 阅读(394) 评论(0) 推荐(0)
摘要:题目: 解答: 方法一:排序。 我们将数组进行升序排序,如果数组中所有的元素都是非负数,那么答案即为最后三个元素的乘积。 如果数组中出现了负数,那么我们还需要考虑乘积中包含负数的情况,显然选择最小的两个负数和最大的一个正数是最优的,即为前两个元素与最后一个元素的乘积。 上述两个结果中的较大值就是答案 阅读全文
posted @ 2020-05-04 18:16 梦醒潇湘 阅读(265) 评论(0) 推荐(0)
摘要:题目: 解答: 我们从左到右扫描数组 flowerbed,如果数组中有一个 0,并且这个 0 的左右两侧都是 0,那么我们就可以在这个位置种花,即将这个位置的 0 修改成 1,并将计数器 count 增加 1。对于数组的第一个和最后一个位置,我们只需要考虑一侧是否为 0。 在扫描结束之后,我们将 c 阅读全文
posted @ 2020-05-04 17:57 梦醒潇湘 阅读(167) 评论(0) 推荐(0)
摘要:题目: 解答: 方法一:暴力破解,找出所有的两个元素的排列。 方法二:排序。 为了理解这种方法,让我们从不同的角度来看待问题。我们需要形成数组元​​素的配对,使得这种配对中最小的总和最大。因此,我们可以查看选择配对中最小值的操作,比如 (a,b)可能会产生的最大损失 a-b (如果 a > b)。 阅读全文
posted @ 2020-05-04 17:44 梦醒潇湘 阅读(190) 评论(0) 推荐(0)
摘要:题目: 解答: 依次扫描字符串,并用两个计数器记录A和L的数量,其中对于L计数器,因为需要是连续计数,所以如果碰到A和P,则需要重置L计数器。 当A计数器 > 1 时,直接返回false。当L计数器 > 2 时,直接返回false。 都扫描结束,则返回true。 1 class Solution { 阅读全文
posted @ 2020-05-04 17:41 梦醒潇湘 阅读(188) 评论(0) 推荐(0)
摘要:题目: 解答: 首先将数组排序,随后从小到大遍历数组中的元素,对于每一个元素,向其右侧二分查找k+nums[i],因为向其左侧查找得到的nums[i]-k一定是在更早之前被发现的(nums[i]-k)+k。 如果当前元素和其前一个元素相等,那么其找到的结果也必然和前一个元素相等,是重复结果,因此直接 阅读全文
posted @ 2020-05-04 17:37 梦醒潇湘 阅读(176) 评论(0) 推荐(0)
摘要:题目: 解答: 方法一:递归 算法: (1)检查整数N,如果N小于等于1,则返回N; (2)否则,通过递归关系:F(n) = F(n-1) + F(n-2); (3)直到所有计算返回结果得到答案; 1 public class Solution { 2 public int fib(int N) { 阅读全文
posted @ 2020-05-04 17:32 梦醒潇湘 阅读(221) 评论(0) 推荐(0)
摘要:题目: 解答: 方法一:快慢指针 1 class Solution { 2 public: 3 int findMaxConsecutiveOnes(vector<int>& nums) 4 { 5 int slow = 0; 6 int fast = 0; 7 int count = 0; 8 i 阅读全文
posted @ 2020-05-04 17:24 梦醒潇湘 阅读(208) 评论(0) 推荐(0)
摘要:题目: 解答: 方法一:哈希表。 方法二:原地修改。 (1)我们需要知道数组中存在的数字,由于数组的元素取值范围是 [1, N],所以我们可以不使用额外的空间去解决它。 (2)我们可以在输入数组本身以某种方式标记已访问过的数字,然后再找到缺失的数字。 算法: (1)遍历输入数组的每个元素一次。 (2 阅读全文
posted @ 2020-05-04 17:22 梦醒潇湘 阅读(286) 评论(0) 推荐(0)
摘要:题目: 解答: 方法一: 利用set中元素的有序性和唯一性,将元素放入set中,若set的size不小于3输出倒数第三个元素;若set的size小于3,输出最后一个元素。 1 class Solution { 2 public: 3 int thirdMax(vector<int>& nums) 4 阅读全文
posted @ 2020-05-04 17:17 梦醒潇湘 阅读(181) 评论(0) 推荐(0)
摘要:题目: 解答: 方法一: 当我们遇到一个非零元素时,我们需要交换当前指针和慢速指针指向的元素,然后前进两个指针。如果它是零元素,我们只前进当前指针。 1 class Solution { 2 public: 3 void moveZeroes(vector<int>& nums) 4 { 5 int 阅读全文
posted @ 2020-05-04 17:11 梦醒潇湘 阅读(252) 评论(0) 推荐(0)
摘要:题目: 解答: 方法有排序、哈希、数学求和等,这里采用位运算。 由于异或运算(XOR)满足结合律,并且对一个数进行两次完全相同的异或运算会得到原来的数,因此我们可以通过异或运算找到缺失的数字。 1 class Solution { 2 public: 3 int missingNumber(vect 阅读全文
posted @ 2020-05-04 17:05 梦醒潇湘 阅读(175) 评论(0) 推荐(0)
摘要:题目: 解答: 思路:哈希。 (1)维护一个哈希表,里面始终最多包含 k 个元素,当出现重复值时则说明在 k 距离内存在重复元素; (2)每次遍历一个元素则将其加入哈希表中,如果哈希表的大小大于 k,则移除最前面的数字; (3)时间复杂度:O(n)O(n),nn 为数组长度; 1 class Sol 阅读全文
posted @ 2020-05-04 17:01 梦醒潇湘 阅读(171) 评论(0) 推荐(0)
摘要:题目: 解答: 方法一:哈希,判断value值是否大于1 1 class Solution { 2 public: 3 bool containsDuplicate(vector<int>& nums) { 4 5 unordered_map <int,int>mp; 6 for(int i:num 阅读全文
posted @ 2020-05-04 16:55 梦醒潇湘 阅读(204) 评论(0) 推荐(0)
摘要:题目: 解答: 使用反转。 这个方法基于这个事实:当我们旋转数组 k 次, k\%nk%n 个尾部元素会被移动到头部,剩下的元素会被向后移动。 在这个方法中,我们首先将所有元素反转。然后反转前 k 个元素,再反转后面 n-kn−k 个元素,就能得到想要的结果。 假设 n=7且 k=3 。 原始数组 阅读全文
posted @ 2020-05-04 16:52 梦醒潇湘 阅读(407) 评论(0) 推荐(0)
摘要:题目: 解答: 思路: 如果我们把众数记为+1,把其他数记为-1,将它们全部加起来,显然和大于0,从结果本身我们可以看出众数比其他数多。 算法: Boyer-Moore算法的详细步骤如下: 1)维护一个候选众数candidate和它出现的次数count。初始时,candidate可以为任意值,cou 阅读全文
posted @ 2020-05-04 16:47 梦醒潇湘 阅读(416) 评论(0) 推荐(0)
摘要:题目: 解答: 1 class Solution { 2 public: 3 vector<int> twoSum(vector<int>& numbers, int target) 4 { 5 int low = 0; 6 int high = numbers.size() - 1; 7 8 wh 阅读全文
posted @ 2020-05-04 16:43 梦醒潇湘 阅读(137) 评论(0) 推荐(0)
摘要:题目: 解答: 1 class Solution { 2 public: 3 int maxProfit(vector<int>& prices) 4 { 5 int profit = 0; 6 for (int i = 1; i < prices.size(); i++) 7 { 8 int tm 阅读全文
posted @ 2020-05-04 16:32 梦醒潇湘 阅读(117) 评论(0) 推荐(0)
摘要:题目: 解答: 我们需要找出给定数组中两个数字之间的最大差值(即,最大利润)。此外,第二个数字(卖出价格)必须大于第一个数字(买入价格)。 形式上,对于每组 i和 j(其中 j >i),我们需要找出 max(prices[j] - prices[i])。 方法一:暴力法 1 class Soluti 阅读全文
posted @ 2020-05-04 16:29 梦醒潇湘 阅读(208) 评论(0) 推荐(0)
摘要:题目: 解答: 总的来说就是利用杨辉三角形后一行与前一行的关系。更新过程为:从倒数第二个元素开始往前更新 它等于原来这个位置的数 + 前一个位置的数行[i] = 行[i] + 行[i-1] 1 class Solution { 2 public: 3 vector<int> getRow(int r 阅读全文
posted @ 2020-05-04 16:24 梦醒潇湘 阅读(128) 评论(0) 推荐(0)