摘要: 基本思路 每次让数组的n-1个元素加1——等价于——每次让一个元素减1; 把所有数加到相同的最大值 ——等价于——把所有的数捡到最小值; 因此最小操作次数 = 数组所有元素之和 - ( 数组长度 * 最小值); 标程 1 class Solution { 2 public: 3 int minMov 阅读全文
posted @ 2023-04-12 15:45 -Miracle- 阅读(10) 评论(0) 推荐(0) 编辑
摘要: 基本思路 思路————双指针 初始状态左右指针都指向数组首位元素,然后right指针开始迭代数组,当碰到非0元素则与左指针left所在位置的元素交换。 交换完毕后,左指针left则向前移动到下一位置,做好准备迎接下一个非0元素的交换。 这种算法效率比之前撰写的“伪双指针”效率更高,更能应对特殊情况。 阅读全文
posted @ 2023-04-12 15:12 -Miracle- 阅读(12) 评论(0) 推荐(0) 编辑
摘要: 基本思路 为了满足题目要求的不使用额外的存储空间(当然返回的数组除外),并且时间复杂度控制在O(n),最多只能常数级别遍历,因此考虑将原数组视作一个"哈希表"。 遍历原数组,将【1,n】上的值域映射到【0,n-】的坐标上,某个数x扫描到一次则将这个数x映射的 x-1的坐标处的值加上n。 然后再次遍历 阅读全文
posted @ 2023-04-12 15:10 -Miracle- 阅读(7) 评论(0) 推荐(0) 编辑
摘要: 基本思路 需要知道数组中某些元素的出现次数来寻求最大出现次数,以及要找到长度最短的子数组长度。 因此可以考虑使用哈希表来记录某个元素出现的次数,第一个元素出现的下表,最后一个元素出现的下标。映射关系:x-->{times,starti,endj}。 标程 1 class Solution { 2 p 阅读全文
posted @ 2023-04-12 15:08 -Miracle- 阅读(7) 评论(0) 推荐(0) 编辑
摘要: 基本思路 用一个vector来模拟哈希表,记录每个元素的数量从而来找到重复的数和缺失的数。 标程 1 class Solution { 2 public: 3 vector<int> findErrorNums(vector<int>& nums) { 4 int n = nums.size(); 阅读全文
posted @ 2023-04-12 15:02 -Miracle- 阅读(15) 评论(0) 推荐(0) 编辑
摘要: 解题思路数组从大到小排序后,从第2个元素开始遍历,如果与上一个元素不相同,则标志位++,标志位一旦从1加到3(两次)则代表存在第三大的数,即可返回。如若不存在第三大的数,则在遍历结束后,函数末尾返回数组的第一个元素(最大的元素)。 标程 1 class Solution { 2 public: 3 阅读全文
posted @ 2023-04-12 14:59 -Miracle- 阅读(17) 评论(0) 推荐(0) 编辑
摘要: 解题思路基础题,最后加一个特殊情况处理就好,时间复杂度O(n) 代码 class Solution {public: int findMaxConsecutiveOnes(vector<int>& nums) { int count=0; int Maxcount=0; for(int i =0; 阅读全文
posted @ 2023-04-12 14:53 -Miracle- 阅读(6) 评论(0) 推荐(0) 编辑
摘要: 2020.2.13 属于我的博客正式宣布开张了! 阅读全文
posted @ 2020-02-13 11:55 -Miracle- 阅读(95) 评论(0) 推荐(0) 编辑