leetcode
柚子的power
这个作者很懒,什么都没留下…
展开
-
判断二进制中有几个1
判断二进制n中有几个1方法:1.进行n=n&(n-1)运算,目的是将n中最低位的1消除,计数器+12.重复步骤1直至n==0代码:def count(n): res=0 while n!=0: n=n&(n-1) res+=1 return res...原创 2020-07-03 16:05:05 · 465 阅读 · 0 评论 -
位运算方法判断是否为2的幂次和4的幂次
1. 判断n是否为2的幂次:n&(n-1)==0解释:n的二进制中最为1,低于该位的均为0 n-1的二进制中最高位为0,低于该位的均为1python代码:class Solution: def isPowerOfTwo(self, n: int) -> bool: return n>0 and n&(n-1)==02. 判断n是否为4的幂次:在n为2的幂次的基础上再添加一个条件:n的二进制的偶数位为1,奇数位为0;如何表示原创 2020-07-03 15:02:50 · 526 阅读 · 0 评论 -
1029. 两地调度
题目:解题思路:step1:计算出每个人去A地与去B地之差x;step2:根据x对列表进行从小到大排序;step3:取前一半的人去A地,取后一半的人去B地。python源码:from typing import Listclass Solution: def twoCitySchedCost(self, costs: List[List[int]]) -> int: costs.sort(key=lambda x:(x[0]-x[1]))原创 2020-06-30 14:24:33 · 376 阅读 · 0 评论 -
1005. K 次取反后最大化的数组和
题目:解题思路:一共迭代K次,每次都将最小的A[i]替换为-A[i]即可。python代码:from typing import Listclass Solution: def largestSumAfterKNegations(self, A: List[int], K: int) -> int: for i in range(K): A.sort() A[0]=-A[0] return .原创 2020-06-29 17:06:14 · 136 阅读 · 0 评论 -
1021.删除最外层的括号
题目:解题思路:设置一个变量temp用于记录括号的匹配:遇到“(”时temp+1;遇到“)”时temp-1。代码实现(python版本):class Solution: def removeOuterParentheses(self, S: str) -> str: temp=0 ss="" for i in S: if i=="(": temp+=1原创 2020-06-27 15:56:53 · 281 阅读 · 0 评论 -
459.重复的字字符串
题目:给定一个非空的字符串,判断它是否可以由它的一个子串重复多次构成。给定的字符串只含有小写英文字母,并且长度不超过10000。示例一:示例 1:输入: "abab"输出: True解释: 可由子字符串 "ab" 重复两次构成。示例 2:输入: "aba"输出: False示例 3:输入: "abcabcabcabc"输出: Tr...原创 2020-03-23 12:14:56 · 175 阅读 · 0 评论 -
LeetCode:有效的括号
题目描述:给定一个只包括 '(',')','{','}','[',']'的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。测试样例1:输入: "()"输出: true测试样例2:输入: "()[]{}"输出: true测试样例3:输入: "(]"输出...原创 2020-03-15 10:41:27 · 2142 阅读 · 0 评论 -
leetcode Missing Number
题目分享一下异或运算:异或运算可以查找一串连续数字中的缺失值,是不是很神奇呢?根据异或的特点a=a^b^b;这个式子的含义可以拆开来理解,b^b=0,0与任何数异或的值都等于它本身。本题需要求0,1,2, 3....一连串数字中的缺失值,根据异或的特点,我们可以对数组中的每个数字异或各自的下标,再将结果与数组中的下一个数字与下一个数字异或后的结果进行异或,以此类推,最后将结果和数组...原创 2018-12-25 21:34:35 · 134 阅读 · 0 评论 -
leetcode Move Zeroes
题目题目描述:将数组中的所有0移动到最后。解题思路:对数组只需遍历一次即可。遍历数组时判断该数是否为0,如果是,则将0的个数加1,对于该数后面的每一个数都要前移当前0的个数的位置。遍历完所有数后,在数组最后加上count个0(count变量统计0的个数)。源码附上:class Solution {public: void moveZeroes(vector<int...原创 2018-12-26 08:33:49 · 121 阅读 · 2 评论 -
leetcode Third Maximum Number
题目问题描述:求解第三大的数。解题思路,先对数组进行排序。从后往前遍历,若当前字符与后一个字符不一致,则标记数加1,当 标记数为3时跳出循环,若当前标记数不为3并且数组遍历完成,则取最大的数。源码附上:class Solution {public: int thirdMax(vector<int>& nums) { sort(nums...原创 2018-12-26 09:03:00 · 127 阅读 · 0 评论 -
leetcode Find All Anagrams in a String
题目题目大意:从字符串s中找到与字符串p匹配的字符串(这里的匹配不算顺序,也就是在字母相同的情况下可颠倒顺序)解题思路:1.在s中先比较前p.size()个字符串与p是否匹配,如果匹配,存储字符串中第一个字母的下标;2. 接下来比较s后面的字符串,也就是s往后加一个字母,减去开头的字母,如果相等,则储字符串中第一个字母的下标;其实解这道题的关键在于如何比较s中的p.size()...原创 2019-01-18 22:03:34 · 115 阅读 · 0 评论 -
leetcode DI String Match
题目题目大意:根据字符串S(其中D表示‘Decrease’,I表示‘Increase’),找到一个序列A,满足两个条件:1.相邻的两个数字的大小满足S中对应位置的含义(D 或者 I);2.数组A中的数字必须是0~(S的长度);此题答案可能有多种,只要能正确写出其中一种情况即可;下面举一个例子:Input: "IDID"Output: [0,4,1,3,2]1.相邻位...原创 2019-01-20 09:08:05 · 158 阅读 · 0 评论 -
leetcode Closest Points to Origin
题目题目大意:找到距离(0,0)点最近的K个点。解题思路:计算每个点到(0,0)点的距离,最后再排序即可。解决这道题的关键在于如何选择数据结构。使用map存放点和距离两个变量。由于map本身是对key值排序的,若要对value排序,需要将map的key和value转到vector<pair<变量,变量>>中,然后在使用一下sort(point.begin()...原创 2019-01-20 10:30:16 · 148 阅读 · 0 评论 -
leetcode Projection Area of 3D Shapes
题目题目大意:给出一个n*n的矩阵,矩阵中的数字代表1*1*1小方格的高度,计算组成的立体图的三视图的面积和;解题思路:分别计算主视图,侧视图,俯视图的面积;主视图面积:矩阵中的每一列的最大值之和;侧视图面积:矩阵中的每一行的最大值之和;俯视图面积:矩阵中所有不为0的数字之和;最后将三视图的面积加起来即为最终结果;源码附上:class Solution {pub...原创 2019-01-20 11:01:09 · 267 阅读 · 0 评论 -
leetcode Smallest Range I
题目题目大意:给定一个数组A和x(K<=x<=-K),对数组A中的每个数字都加上x,每个数字加的x可以不同,最后得到新的数组B,使得B中的最大值和最小值之差最小;解题思路:最后要求的是最大值和最小值之差最小,所以仅需考虑数组A中的最大值和最小值;情况1:数组A中的最大值和最小值之差<=2*K,则说明可以使得min+x1=max+x2成立,最后数组B的最大值和最小值之差...原创 2019-01-20 11:27:58 · 150 阅读 · 0 评论 -
leetcode Intersection of Two Arrays
题目本题要求两个集合的交集。解题思路:对于两个数组nums1和nums2,把nums1中的值都存到unordered_set中,unordered_set的特点,存入的值不重复的,无序的,并且没有key value的说法,也就是说里面只存了一个值而不是一对值。遍历nums2中的每个元素,使用unordered_set中的count方法查找nums2中指定元素在unordered_set s...原创 2018-12-30 11:34:44 · 136 阅读 · 0 评论 -
leetcode Word Pattern
题目题目大意:给定一个字符串模板pattern(字符串中都是一个一个字母)和一个字符串str(字符串中都是一个个单词),使得模板的样子与字符串中单词的样子相同。解题思路:在评论区中发现C++中一个非常好用的输入输出控制类,istringstream,它的作用可以分割字符串中的单词。使用两个map,分别存放pattern中的单个字母和str中的单词,是两者一 一对应等于当前位置的下标,循...原创 2018-12-30 10:57:43 · 177 阅读 · 0 评论 -
leetcode Longest Palindrome
题目题目大意:给定一个字符串,根据字符串中的字母组合成最长的字符串解题思路:根据回文字符串的特点,两边对称;我们可以把回文字符串分为两类,一类是"ABCBA"类型,还有一类是"ABBA"类型,第一类中字符个数为奇数,第二类中字符个数为偶数,首先,统计给定字符串中的奇数字符的个数,再根据总字符个数-奇数字符个数求解出偶数字符个数,偶数字符一定可以构成回文字符,最后判断一下奇数字符个数是否大于...原创 2019-01-04 11:14:52 · 175 阅读 · 0 评论 -
leetcode remove-duplicates-from-sorted-array
题目题意:去掉重复的元素,并返回新的长度。解题思路:题目要求不能申请新的数组空间,而是在原来的数组中修改。也就是说我们需要覆盖重复的元素。修改之后会有多于的部分在数组末尾,可以使用容器中的erase()方法去除。核心代码附上:class Solution {public: int removeDuplicates(vector<int>& nums)...原创 2018-11-26 14:48:24 · 186 阅读 · 0 评论 -
leetcode search-insert-position
题目题意:对于一个已排好序的array,将target插入到合适的位置。解题思路:采用二分法插入。核心代码:class Solution {public: int searchInsert(vector<int>& nums, int target) { int n=nums.size(); int p=0; ...原创 2018-11-26 14:52:18 · 140 阅读 · 0 评论 -
leetcode Merge Sorted Array
题目解题思路:输入已排序好的nums1和nums2数组,将nums2中的数据插入到nums1中。如果从小到大遍历(从数组下由小到大遍历),当nums2的数据插入到nums1时会覆盖nums1中原有位置的数据,从而丢失了此数据,此种做法不可行。我们可以换种角度看问题。将标记位定位到nums1和nums2中数字的末位。将从大数开始比较,若nums1[m-1]比nums2[n-1]小,则将n...原创 2018-11-29 13:57:41 · 188 阅读 · 0 评论 -
leetcode Pascal's Triangle
题目解题思路:这道题目本身不难,由于要用vector表示,在这里还是记录一波如何使用vector动态创建不等长的二维数组。vector<vector<int>> v(numRows)表示创建二维数组中的行数。v[i].resize(i+1)表示在第i行上创建的列数。源码附上:class Solution {public: vector&l...原创 2018-11-29 14:36:00 · 136 阅读 · 0 评论 -
leetcode best-time-to-buy-and-sell-stock
题目题意理解:对于一支股票,价格每天都在变换,求某天买入的股票,某天卖出股票所获得的利润最大。根据题目意思,有一个约束条件,和一个目标函数目标函数:max(大数-小数);约束条件:大数的下标比小数的下标大;解题思路:设定一个最小值和最大利润值,遍历数组中的每个数,判断它是否比最小值小,如果是,则将其赋值为最小值(股票买入),判断当前的price(股票卖出)-最小的price的利...原创 2018-11-30 21:32:04 · 121 阅读 · 0 评论 -
leetcode best-time-to-buy-and-sell-stock-ii
题目与上一题买卖股票不同得到是,本题可以进行买卖交易多次。看了论坛中的大佬的解法,不禁感叹,数字间这种奇妙的联系真的很powerful啊!!!解题思路:对于一个数组,从第二天开始,都求一下与前一天的差价,如果大于0,则赚取这笔利润(也就是说,前一天买入,这一天卖出)。为什么可以这么做呢?举例说明:step1:一组序列:1,2,3,6;不论怎么进行交易,最后都能赚取5元(或者...原创 2018-12-01 15:24:47 · 123 阅读 · 0 评论 -
Contains Duplicate II
题目map和unordered_map的区别unordered_set的使用方法题目是查找序列中在指定距离范围内(k)是否存在重复元素,若存在,则返回true,否则,返回false;看了评论区大佬的解法:1.首先,判断K的值的大小:若k小于0,则返回false;若k大于等于数组序列长度,则将k指定为数组长度-1(这是k可取的最大值)2.接着从头开始遍历数组。定义...原创 2018-12-21 09:33:21 · 128 阅读 · 0 评论 -
leetcode Find All Numbers Disappeared in an Array
题目题意:一个长度为n的数组中,原先包含[1,n]的数,要求缺失值。在讨论区中看到一种不错的C++版解法,再结合评论区大佬的讲解,终于搞懂了。解题思路:遍历数组中的每个值,将每一个值对应到它所在的下标位置,如何下标所在位置的那个数为正数,则把它变为负数。举个例子对于数组{4,3,2,7,8,2,3,1}数组中的第一个值为4,如果是按照顺序排列,它的下标位置应该为3,(1,2,3...原创 2018-12-27 19:46:20 · 125 阅读 · 0 评论 -
leetcode Happy Number
题目使用的数据结构:unordered_map(unordered_map与map的区别请参见上一篇博文)解题思路:定义一个unordered_map变量,在该变量中查找,n,如果键值n对应的value为0,则将键值n对应的value加1,后面的操作为:把n的各个位上的数字平方求和,得到一个新的n。如果不为0,说明之前已经出现过了,后面做的操作是一个循环操作,也就是说,n不是一个happy...原创 2018-12-29 13:26:19 · 117 阅读 · 0 评论 -
leetcode Count Primes(判断小于某个数的素数个数的逆向思维)
题目题意:给定一个数n,求小于n的所有素数的个数解题思路:如果是按照正常计算素数的方法解题一定会超时。这是超时情况的代码:class Solution {public: int countPrimes(int n) { int i,j; int num=0; if(n>2) num++; ...原创 2018-12-29 14:05:00 · 470 阅读 · 0 评论 -
leetcode Valid Anagram
题目这道题要判断两个字符串中的字符是否相等。第一种很容易想到的方法对两个字符串进行排序,然后比较一下排序之后的字符串是否一样,如果一样就返回true,否则返回false;此种做法的效率比较低,耗时较大。在评论区中看到一种很有意思的解法,分享一下。首先判断一下两个字符串的长度是否相等,如果不等直接返回false,如果相等,接着将s字符串中的字符作为key值,字符个数作为value值,...原创 2018-12-29 14:26:32 · 169 阅读 · 0 评论 -
leetcode Intersection of Two Arrays II
题目该题也是求解两个集合的交集,与上一题不同是,如果两个集合中存在相同的数字,且该数字的个数不止一个,则要把所有数字都存到交集中。比如说:集合1为{1,2,2,1},集合2为{2,2},则集合1和集合2的交集为{2,2};解题思路:使用unordered_map存储集合1中的数字;遍历集合2,在unordered_map中减去对应的key值,若剩余的value值大于等于0(表示此数为集合1...原创 2019-01-04 10:13:40 · 140 阅读 · 0 评论 -
leetcode First Unique Character in a String
题目题目大意:求一个字符串中第一个字母不重复的下标。使用unordered_map数据类型,把字符串中的所有字母都存储在里面,然后根据字符串字母顺序遍历一下unordered_map 这个类型的变量,如果某个字母的对应的value值为1,则输出下标。跳出循环的情况下,则返回-1,。源码附上: class Solution {public: int firstUniqC...原创 2019-01-04 10:32:28 · 135 阅读 · 0 评论 -
leetcode Find the Difference
题目本题解法与前面几题解题思路一致,就不讲解啦!源码附上:class Solution {public: char findTheDifference(string s, string t) { unordered_map<char,int> map; for(int i=0;i<s.size();i++) ...原创 2019-01-04 10:43:56 · 169 阅读 · 0 评论 -
leetcode plus one
题目解题思路:在数组中放入一列数,其中数组下标高的位低位,数组下标低的位高位,把数组中的数看成一个int型的整数,进行加一操作,如果在个位上产生进位,则要对十位做进位处理,若十位产生进位,则要对百位进行进位处理……一次类推,若最后所得结果的最高位为0,则要在数组的最前面加入一个进位位1。由于此题仅仅进行加一操作所以只要判断在加一之前的数字是否为9,若是,则把改为置为0,然后再进位。最后判断...原创 2018-11-29 12:53:14 · 208 阅读 · 0 评论