
LeetCode 经典题目
hello_levy
不要搞我呀
展开
-
455. Assign Cookies 分发饼干
题目分析:先将孩子的胃口和饼干的大小从小到大排序,然后从胃口小的孩子发饼干,遍历饼干的大小,分给所能满足当前孩子的最小的饼干.这里先用了2个sort函数排序,不知道有没有不需要排序的算法C++:int findContentChildren(vector<int>& g, vector<int>& s) { int count = 0; ...原创 2020-04-23 14:49:20 · 162 阅读 · 0 评论 -
349. Intersection of Two Arrays
题目分析:C++使用unordered set装入其中一个数组,然后和另一数组比较,得到相同的元素;python可以用&或者自带的函数,有用字典的方式,回头再做C++:vector<int> intersection(vector<int>& nums1, vector<int>& nums2) { unorder...原创 2020-04-21 15:21:02 · 239 阅读 · 0 评论 -
342. Power of Four
题目分析:直接位运算判断即可C++:bool isPowerOfFour(int num) { if (num <= 0) return false; if ((num & num - 1) != 0) return false; return (num & 0x55555555) == num; //判断...原创 2020-04-21 14:24:14 · 191 阅读 · 0 评论 -
283. Move Zeroes
题目分析:一次遍历数组,找到0的元素删除,然后再在末尾补上0即可C++:void moveZeroes(vector<int>& nums) { int len = nums.size(); for (int i = 0; i < len; i++){ if (nums[i] == 0){ nums.er...原创 2020-04-21 14:00:10 · 142 阅读 · 0 评论 -
219. Contains Duplicate II (set的一些小结)
题目分析:我们使用大小不超过k的unorderset来作为滑动窗口,比较窗口內是否有大小相等的元素c++:bool containsNearbyDuplicate(vector<int>& nums, int k) { //hashset<int> s; unordered_set<int> s; int len = n...原创 2020-04-20 15:58:44 · 139 阅读 · 0 评论 -
198. House Robber 打家劫舍
题目分析:动态规划就行,下面的链接我觉得解释的很详细,很适合学习https://leetcode-cn.com/problems/house-robber/solution/dong-tai-gui-hua-jie-ti-si-bu-zou-xiang-jie-cjavap/C++:int rob_optimization(vector<int>& nums...原创 2020-04-15 23:35:44 · 103 阅读 · 0 评论 -
190. Reverse Bits 颠倒二进制位
题目分析:将一个二进制的数颠倒过来,比如10010,输出01001。在写c++代码时,我把这个看作是十进制颠倒的原理,比如110,十进制情况下,每次%出最后一位然后相加。二进制,就只需要将% /的底数换成2就行。在python中,写同样的代码会有问题,python3中int位数不是固定32位,其实可以用fixedint模块,但是leetcode没有,所以就用同样的思想,一位位的取出来。C++:...原创 2020-04-14 15:33:24 · 250 阅读 · 0 评论 -
169. Majority Element 多数元素 (投票法原理的简单理解)
题目分析:找出超过半数的那个数,这里我用了投票法,投票法可以这么来理解,首先我们可以看作这一些数代表着不同班级的学生,现在要竞选最高人气的班级,每个班的学生自然就只会投赞成票给自己的班级,投反对票给其他班级,那么超过半数人数的那个班级就算减去其他班的反对票,依旧得票是正数,而其他班级的得票均一定为负数,这样就选出了超过半数的那个数C++:int majorityElement(v...原创 2020-04-10 18:02:57 · 380 阅读 · 1 评论 -
167. Two Sum II - Input array is sorted 两数之和
题目分析:在一串已经排好序的数组內找到2个和为target值的数。其实我们使用双指针就行,因为那两个数一定在这串数字里面,我们收尾各设置一个指针,两边靠近的过程中就一定能找到符合要求的数C++:vector<int> twoSum(vector<int>& numbers, int target) { int len = numbers.si...原创 2020-04-10 16:01:05 · 113 阅读 · 0 评论 -
155. Min Stack 最小栈
题目分析:定义一个类,有一些栈的操作,主要是要得到栈里面的最小值,我们直接用一个变量来保存目前栈里面的最小值就行。这里我们进出栈都需要比较栈顶元素和最小值的大小,以便实时更新栈中最小的值。C++:class MinStack {public: /** initialize your data structure here. */ MinStack() { ...原创 2020-04-10 00:45:41 · 114 阅读 · 0 评论 -
0136.single-number 只出现一次的数字
题目分析:找出一串数字中只出现一次的数字。有很多种方法,比如先排序,再22比较,不同的就是只出现一次的;还有用该数组的和的2被减去该数组的和,得到的就是那个数字,我选择的方法是异或,异或有交换律,因为只有一个数字是出现一次,其他都是2次,两个相同的数异或是0且,剩下的数字和0异或则为自身。C++:int singleNumber(vector<int>& num...原创 2020-04-08 22:17:51 · 119 阅读 · 0 评论 -
125. Valid Palindrome 验证回文串
题目分析:给定一个字符串,忽略大小写和数字,判断是否为回文串。即判断这个字符串从头看和从尾看都是一致的C++:bool isPalindrome(string s) { if(s.empty()) return true; string str; for(auto c : s) if(isalnum(c)) ...原创 2020-04-08 17:41:01 · 137 阅读 · 0 评论 -
122.Best Time to Buy and Sell Stock II 买卖股票的最佳时机 II
题目分析:我们要求的就是在一只股票中能获得的最大收益,其实可以简单理解为,只要买了之后第二天股票涨价了,我就可以买,只要买了之后第二天股票下跌,我就不买,即计算股价趋势图中每一段上升的差价总和。C++:int maxProfitII(vector<int>& prices) { if (prices.empty()) return 0; ...原创 2020-04-08 14:53:05 · 103 阅读 · 0 评论 -
Leetcode 121. Best Time to Buy and Sell Stock 买卖股票的最佳时机
题目分析:给定一只股票每天的价格,求能得到的最大利润。我们当然是想着以最低的价格时买入,最高的价格时卖出,这样能得到最大利益,如 3 1 7 5 2,1买入,7卖出,得到最的利润,但是存在这种情况,即2 8 1 6 4 5,我们可以看出来,2买入8卖出的时候才能得到最大利益,所以我们不能单纯的找最大最小值。但是我们可以从头开始一天天的看,遍历整个股票价格的波动过程。以minprice记录从第一天开...原创 2020-04-07 14:37:52 · 136 阅读 · 0 评论 -
88. Merge Sorted Array 合并两个有序数组
题目分析:将2个有序的数列合并成一个有序的数列。思路就是从2个数列的末尾开始看,比较哪个大,将最大的数作为合并到nums1的最后一位数,以此类推,遍历完其中一个数列结束,最后判断nums2是否为空来判断合并是否完成,因为全部合到nums1中,所以只需要判断nums2就行C++:这里有个用multiset的方法,利用容器的特点去解void merge(vector<int&...原创 2020-04-02 14:43:35 · 239 阅读 · 0 评论 -
53. Maximum Subarray
还有很多方法,以后回头刷的时候再试试其他的Kadane算法:https://zh.wikipedia.org/wiki/%E6%9C%80%E5%A4%A7%E5%AD%90%E6%95%B0%E5%88%97%E9%97%AE%E9%A2%98题目分析:给一串数字,输出 最大子数列的和C++:int maxSubArray(vector<int>&a...原创 2020-04-01 18:06:42 · 125 阅读 · 0 评论 -
26. Remove Duplicates from Sorted Array
题目分析:给出一串数字,找出这串数字所有不同数字的个数n,并且得到新的大小为n的集合包含这n个不同的数,要求空间复杂度为O(1)。代码分析:c++int removeDuplicates(vector<int>& nums) { if(nums.empty()) return 0; auto t1 = nums.begin(); //...原创 2020-03-26 20:18:39 · 85 阅读 · 0 评论 -
20. Valid Parentheses
题目分析:括号匹配的问题,使用栈就很容易实现代码分析:C++:bool isValid(string s) { stack<char> st; if (s.length() == 0) return false; for(char c : s){ if (c == '(' || c == '{' || c == '[')...原创 2020-03-24 20:55:29 · 100 阅读 · 0 评论