
LeetCode
文章平均质量分 54
shxifs
这个作者很懒,什么都没留下…
展开
-
203. Remove Linked List Elements
没有AC,原因分析:对于head的处理应该放在最后 //版本二 ListNode*removeElements(ListNode* head, int val) { if(!head) return head; ListNode* p=head; if(head->val==val)...原创 2018-03-20 22:43:31 · 105 阅读 · 0 评论 -
元素归位法
给定一个范围在1 ≤ a[i] ≤ n (n = 数组大小 ) 的 整型数组,数组中的元素一些出现了两次,另一些只出现一次。找到所有在 [1, n] 范围之间没有出现在数组中的数字。您能在不使用额外空间且时间复杂度为O(n)的情况下完成这个任务吗? 你可以假定返回的数组不算在额外空间内。示例:输入:[4,3,2,7,8,2,3,1]输出:[5,6]这种题目直...原创 2019-06-13 19:32:01 · 497 阅读 · 0 评论 -
摩尔投票法的理解
摩尔投票法基于这样一个事实,当一个数的重复次数超过数组长度的一半,每次将两个不相同的数删除,最终剩下的就是要找的数。算法步骤:1.count = 0;num = nums[0]; 表示从此时开始计算投票。2.遍历数组,如果接下来出现的数字与num相同,count加1。如果不同,count减1。3.如果count == 0,表示之前出现的所有数字中num都是可以凑成不同的数对...原创 2019-06-09 13:59:48 · 7535 阅读 · 2 评论 -
非递减数列
给定一个长度为n的整数数组,你的任务是判断在最多改变1 个元素的情况下,该数组能否变成一个非递减数列。我们是这样定义一个非递减数列的:对于数组中所有的i (1 <= i < n),满足array[i] <= array[i + 1]。输入: [4,2,3]输出: True解释: 你可以通过把第一个4变成1来使得它成为一个非递减数列。这个题目需要自己总...原创 2019-06-20 10:26:15 · 1022 阅读 · 0 评论 -
数组的循环移位深入探讨
三次反转法比较简单,我想的是怎么才能用一般的循环移位法,同时又不开新数组,用O(1)的空间来循环移位。思路想的很快,把i位移动到(i+k)%n位,然后不移动i+1位,而是直接移动((i+k)%n+k)%n位,依次类推。[1, 2, 1, 4, 5, 6][1, 2, 1, 4, 3, 6][5, 2, 1, 4, 3, 6][5, 2, 1, 2, 3, 6][5, 2, ...原创 2019-06-10 19:31:44 · 201 阅读 · 0 评论 -
矩阵操作之:方向向量法
包含整数的二维矩阵 M 表示一个图片的灰度。你需要设计一个平滑器来让每一个单元的灰度成为平均灰度(向下舍入) ,平均灰度的计算是周围的8个单元和它本身的值求平均,如果周围的单元格不足八个,则尽可能多的利用它们。输入:[[1,1,1], [1,0,1], [1,1,1]]输出:[[0, 0, 0], [0, 0, 0], [0, 0, 0]]看到这个题目一开始没啥思路,只有...原创 2019-06-17 15:19:43 · 3496 阅读 · 0 评论 -
in-place算法之双指针法
283. 移动零给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。示例:输入: [0,1,0,3,12]输出: [1,3,12,0,0]拿到这个题目,我首先的想法是比较暴力的算法。pre指针指向第一个不0的,再固定pre,扫描右边cur指向第一个为0的,然后交换位置。这样复杂度为O(n2)。有一种比较简单的方法 -> i...原创 2019-06-11 22:35:12 · 164 阅读 · 0 评论 -
第三大的数
设置测试用例的也太恶心了,居然以-2147483648作为输入,而且还放在第二个位置,导致程序很难识别究竟是输入的MIN还是本来就有的MIN。为了简单起见,想了一个办法,把所有的MIN输入值改为MIN+2,这样就能把输入MIN的和初始化的MIN区分开。class Solution { public int thirdMax(int[] nums) { int ma...原创 2019-06-12 12:26:24 · 188 阅读 · 0 评论 -
最短无序连续子数组
给定一个整数数组,你需要寻找一个连续的子数组,如果对这个子数组进行升序排序,那么整个数组都会变为升序排序。你找到的子数组应是最短的,请输出它的长度。输入: [2, 6, 4, 8, 10, 9, 15]输出: 5解释: 你只需要对 [6, 4, 8, 10, 9] 进行升序排序,那么整个表都会变为升序排序。这个题其实不算太难,不想用排序做,所以刚拿到题目的时候没啥太好的思路。经过自...原创 2019-06-18 18:46:25 · 767 阅读 · 1 评论 -
922. 按奇偶排序数组 II
一开始怪自己蠢, 只想到i++,j++的方法. 后来看了题解, 才知道用+=2最方便.这样这个题目思路比较简单了. 只需要分别找到偶数位和奇数位不合条件的数, 交换即可.class Solution { public int[] sortArrayByParityII(int[] A) { int n = A.length; int x = 0;...原创 2019-06-29 20:57:49 · 83 阅读 · 0 评论 -
自己写的二分查找模板
存在三种基本模式:1. 标准二分查找2. 二分查找左边界3. 二分查找右边界只有第1种情况能够在循环内部返回. 这种标准二分查找是左闭右开的写法. 查找范围是 l <= n < r 中间位置计算时, m = (l+r)/2, 这样得到的中间位置靠左. m = (l+r)/2 +1, 这样得到的中间位置靠右. 其中, 2.3两种情况下, 左边界和右边界分别需...原创 2019-09-09 23:29:07 · 131 阅读 · 1 评论 -
自己写的二分查找模板(2)
关于二分查找的类型以及变式不同写法的关键:while循环条件是l < r还是 l <= r 中值m靠左还是靠右 区间是左开右闭还是左右都闭先贴上C++标准库的写法.public int lower_bound(int nums, int target, int l, int r){ while(l < r) { int m = (...原创 2019-09-11 09:47:01 · 109 阅读 · 0 评论 -
自己写的二分查找模板(3)
二分查找真的是博大精深啊。自己又总结了一遍, 把每一类问题都归类如下:(差不多9类) 数组全部有序, 无重复 标准二分查找 大于等于目标值的数 大于目标值的数 小于等于目标值的数 小于目标值的数 数组全部有序, 有重复 查找目标值的左边界 查找目标值的右边界 数组部分有序, 无重复 (例如求旋转数组的最小值, 这个时候可以把最小值看做是求右边有序序列的左边界,这...原创 2019-09-11 13:22:27 · 118 阅读 · 0 评论 -
378. 有序矩阵中第K小的元素
给定一个n x n矩阵,其中每行和每列元素均按升序排序,找到矩阵中第k小的元素。请注意,它是排序后的第k小元素,而不是第k个元素。示例:matrix = [ [ 1, 5, 9], [10, 11, 13], [12, 13, 15]],k = 8,返回 13。思路:二分查找, 并计算每一次小于等于中间值的元素个数 如果<k, 前半段舍掉...原创 2019-09-11 23:50:48 · 114 阅读 · 0 评论 -
单调栈和单调队列的理解
1、单调栈单调栈是指一个栈内部的元素具有严格单调性的一种数据结构,分为单调递增栈和单调递减栈。其具有以下两个性质:1,满足栈底到栈顶的元素具有严格单调性。2,满足栈的先进后出特性,越靠近栈顶的元素越后出栈。元素进栈过程:对于一个单调递增栈来说,若当前进栈的元素为a,如果a<栈顶元素,则直接将a进栈。如果a≥栈顶元素,则不断将栈顶元素出栈,直到满足a...原创 2019-09-20 13:43:25 · 1668 阅读 · 2 评论 -
88. Merge Sorted Array
class Solution {public: void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) { if (m<0&n<0) return; vector<int> c(m+n);...原创 2018-09-11 01:40:28 · 89 阅读 · 0 评论 -
26. Remove Duplicates from Sorted Array
class Solution {public: int removeDuplicates(vector<int>& nums) { if (nums.empty()) return 0; int pre = 0, cur = 0, n = nums.size(); while (cur < n) { ...原创 2018-09-11 01:39:53 · 89 阅读 · 0 评论 -
121. Best Time to Buy and Sell Stock
class Solution {public: int maxProfit(vector<int>& prices) { int res = 0, buy = INT_MAX; for (int price : prices) { buy = min(buy, price); res =...原创 2018-09-11 01:37:06 · 89 阅读 · 0 评论 -
27.[LeetCode] Remove Duplicates from Sorted Array 有序数组中去除重复项
Given a sorted array, remove the duplicates in place such that each element appear only once and return the new length.Do not allocate extra space for another array, you must do this in place with con...原创 2018-03-30 12:58:47 · 102 阅读 · 0 评论 -
53. Maximum Subarray
Find the contiguous subarray within an array (containing at least one number) which has the largest sum.For example, given the array [-2,1,-3,4,-1,2,1,-5,4],the contiguous subarray [4,-1,2,1] has the ...原创 2018-04-09 10:10:16 · 82 阅读 · 0 评论 -
169. Majority Element(关于摩尔投票法)
Given an array of size n, find the majority element. The majority element is the element that appears more than ⌊ n/2 ⌋ times.You may assume that the array is non-empty and the majority element always...原创 2018-04-10 09:51:56 · 169 阅读 · 0 评论 -
利用“异或”处理数组的相关算法的几个例子
例1,寻找数组中丢失的数。。。 有一组数字,从1到n减少了一个数,顺序也被打乱了,放在一个n-1的数组里,请找出丢失的数字。 在上一篇“数组公式相关算法”里介绍过一些解法,不过,那样解的话,可能会有溢出的危险。我们可以利用位运算中的“异或” 来巧妙解决这个问题。 算法步骤:1,对1-n个数做异或运算,得到XOR = 1^2^3^4….^n。 2, 用XOR与当前n-1数组的所有元素依次取异或: 因...转载 2018-04-03 10:00:02 · 985 阅读 · 0 评论 -
18. Pascal's Triangle
天真的以为需要格式空格等等都要注意:class Solution {public: vector<vector<int>> generate(int numRows) { vector<vector<int>> a; a.resize(numRows); for(int i=0;i<nu...原创 2018-04-03 13:34:41 · 85 阅读 · 0 评论 -
219 Contains Duplicate II
第一次做与map容器有关的练习,花了点时间学习了map的一些用法。1、map是一个映射容器。2、map当中有许多用法,例如count返回是否存在key对应的数据。class Solution {public: bool containsNearbyDuplicate(vector<int>& nums, int k) { unordered_map<in...原创 2018-04-19 13:52:45 · 93 阅读 · 0 评论 -
1. Two Sum
不用暴力求解,用O(n)的复杂度需要利用map。class Solution {public: vector<int> twoSum(vector<int>& nums, int target) { vector<int > x(2); int t; unordered_map<int,int>...原创 2018-04-19 14:56:59 · 103 阅读 · 0 评论 -
Find All Numbers Disappeared in an Array
Find All Numbers Disappeared in an Array问题来源:Find All Numbers Disappeared in an Array 很久没有刷题了,感觉大脑开始迟钝,所以决定重拾刷题的乐趣。一开始不要太难,选一些通过率高的题目做,然后就看到了这个题目。我有些吃惊,这个题我虽然知道两种解法,但本身还是有难度的,居然通过率这么高。然后就搜索相关网页,看到一个和它...转载 2018-05-17 13:24:19 · 116 阅读 · 0 评论 -
35. Search Insert Position
class Solution {public: int searchInsert(vector<int>& nums, int target) { if(target>nums.back()) return nums.size();int hi=nums.size()-1,lo=0; while(lo&...原创 2018-09-11 01:32:19 · 84 阅读 · 0 评论 -
66. Plus One
class Solution {public: vector<int> plusOne(vector<int>& digits) { for(int i=digits.size()-1;i>=0;--i) { if(digits[i]<9) ...原创 2018-09-11 01:33:16 · 99 阅读 · 0 评论 -
119. Pascal's Triangle II
class Solution {public: vector<int> getRow(int rowIndex) { vector<int> out; if(rowIndex<0) return out; out.assign(rowIndex+1,0); for(in...原创 2018-09-11 01:33:55 · 118 阅读 · 0 评论 -
167. Two Sum II - Input array is sorted
class Solution {public: vector<int> twoSum(vector<int>& numbers, int target) { int l=0,r=numbers.size()-1; while(l<r) { int sum=numbers[r]+n...原创 2018-09-11 01:34:35 · 99 阅读 · 0 评论 -
189. Rotate Array
class Solution {public: void rotate(vector<int>& nums, int k) { vector<int> array=nums; for(int i=0;i<nums.size();++i) { nums[(i+k)%(nums.s...原创 2018-09-11 01:35:11 · 87 阅读 · 0 评论 -
283. Move Zeroes
class Solution {public: void moveZeroes(vector<int>& nums) { for(int i=0,j=0;i<nums.size();++i) { if(nums[i]) swap(nums[i],nums[j++]); } ...原创 2018-09-11 01:35:51 · 84 阅读 · 0 评论 -
27. Remove Element
class Solution {public: int removeElement(vector<int>& nums, int val) { int res = 0; for (int i = 0; i < nums.size(); ++i) { if (nums[i] != val) nums[res...原创 2018-09-11 01:36:23 · 93 阅读 · 0 评论