自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(39)
  • 收藏
  • 关注

原创 LEETCODE#448找到数组中消失的数

给定一个范围在 1 ≤ a[i] ≤ n ( n = 数组大小 ) 的 整型数组,数组中的元素一些出现了两次,另一些只出现一次。找到所有在 [1, n] 范围之间没有出现在数组中的数字。1. 排序后双指针 vector<int> findDisappearedNumbers(vector<int>& nums) { int num1 = n...

2020-03-10 13:55:22 107

原创 LEETCODE434字符串中的单词数

统计字符串中的单词个数,这里的单词指的是连续的不是空格的字符。1. 在词尾添加空格,当一个字母后为空格则单词数目加一int countSegments(string s) { int num = 0; s += ' '; for(int i =1;i<s.size();i++) if(s[i-1]!=' '&&s[i]=...

2020-03-08 23:13:04 125

原创 LEETCODE#414第三大的数

给定一个非空数组,返回此数组中第三大的数。如果不存在,则返回数组中最大的数。要求算法时间复杂度必须是O(n)。1. 排序后返回int thirdMax(vector<int>& nums) { sort(nums.begin(),nums.end()); nums.erase(unique(nums.begin(),nums.end()),nums...

2020-03-07 18:30:07 112

原创 LEETCODE#389找不同

给定两个字符串 s 和 t,它们只包含小写字母。字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母。请找出在 t 中被添加的字母。1. 排序两字符串,逐一对比返回第一个不同的字符char findTheDifference(string s, string t) { sort(s.begin(), s.end()); sort(t.begin(), t.e...

2020-03-07 18:25:44 95

原创 LEETCODE#387字符串中第一个唯一字符

给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回-1。假定该字符串只包含小写字母。1. 用map记录每个单词出现的次数int firstUniqChar(string s) { unordered_map<char,int> st; for(auto i:s) { st[i]++; }...

2020-03-07 14:54:23 61

原创 LEETCODE#383赎金信

给定一个赎金信 (ransom) 字符串和一个杂志(magazine)字符串,判断第一个字符串ransom能不能由第二个字符串magazines里面的字符构成。如果可以构成,返回 true ;否则返回 false。你可以假设两个字符串均只含有小写字母。1.先将字母全部放置入数组内,之后利用迭代器查询数组内的字母,如若不存在返回false,如若存在,则删除此字母bool canCon...

2020-03-06 23:03:41 215

原创 LEETCODE#371两数之和

不使用运算符 + 和 - ​​​​​​​,计算两整数 ​​​​​​​a 、b ​​​​​​​之和。1. 异或+迭代int getSum(int a, int b) { int sum1 = a ^ b , sum2 = a & b ; while(sum2){ a = sum1 ; b = (unsigned int )sum2 <&l...

2020-03-06 23:00:11 86

原创 LEETCODE#349两个数组的交集

给定两个数组,编写一个函数来计算它们的交集。1. 调用set_intersection vector<int> intersection(vector<int>& nums1, vector<int>& nums2) { set<int> a(nums1.begin(),nums1.end()); se...

2020-03-06 22:53:40 138

原创 LEETCODE#344反转字符串

编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。1. 借助char类型的temp交换void reverseString(vector<char>& s) { for(int i=0;i<s.size()/2...

2020-03-05 16:25:52 87

原创 LEETCODE#283移动零

给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。1. 删除所有零后在末尾补插入void moveZeroes(vector<int>& nums) { int cnt=nums.size(); nums.erase(remove(nums.begin(), nums.end(), 0), nums.en...

2020-03-05 16:12:22 73

原创 LEETCODE#268缺失数字

给定一个包含 0, 1, 2, ..., n 中 n 个数的序列,找出 0 .. n 中没有出现在序列中的那个数。1. 排序后比较下标和值int missingNumber(vector<int>& nums) { sort(nums.begin(),nums.end()); int n = nums.size(); for(int i ...

2020-03-05 16:08:46 110

原创 LEETCODE#258各位相加

给定一个非负整数 num,反复将各个位上的数字相加,直到结果为一位数。1. 暴力循环法int addDigits(int num) { while(num>9) { int sum =0; while(num>=1) { sum += num%10; num...

2020-03-04 17:20:28 96

原创 LEETCODE#234回文链表

请判断一个链表是否为回文链表。1. 前半段链表元素进栈,找到中间节点后边比较边出栈bool isPalindrome(ListNode* head) { if(head==NULL||head->next==NULL) //特殊处理 return true; ListNode *fast=head; ListNode *slow=hea...

2020-03-04 17:16:32 141

原创 LEETCODE#217存在重复元素

给定一个整数数组,判断是否存在重复元素。如果任何值在数组中出现至少两次,函数返回 true。如果数组中每个元素都不相同,则返回 false。1.思路:先排序,再比较两相邻元素,相同则说明有重复bool containsDuplicate(vector<int>& nums) { if(nums.empty()) return false...

2020-03-04 16:38:44 81

原创 LEETCODE#203移除链表元素

删除链表中等于给定值val的所有节点。输入: 1->2->6->3->4->5->6, val = 6输出: 1->2->3->41. 存入vector后套用删除重复的函数ListNode* removeElements(ListNode* head, int val) { vector<int>...

2020-03-04 16:33:22 145

原创 LEETCODE#169求众数

给定一个大小为 n 的数组,找到其中的众数。众数是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。可以假设数组是非空的,并且给定的数组总是存在众数。1. 用map记录各个数字出现的次数,最后利用键查询值,超过n/2则返回int majorityElement(vector<int>& nums) { unordered_map<int,int&gt...

2020-03-03 15:43:30 111 1

原创 LEETCODE#167两数之和

给定一个已按照升序排列 的有序数组,找到两个数使得它们相加之和等于目标数。函数应该返回这两个下标值 index1 和 index2,其中 index1 必须小于 index2。说明:返回的下标值(index1 和 index2)不是从零开始的。你可以假设每个输入只对应唯一的答案,而且你不可以重复使用相同的元素。1. 双指针法vector<int> twoSum(vec...

2020-03-03 15:38:40 88

原创 LEETCODE#136只出现一次的数字

给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。算法应具有线性时间复杂度。1. 利用异或运算,x^0=x 与0异或为自身,x^x=0 相同数异或为0int singleNumber(vector<int>& nums) { for(int i =1;i<nums.size();i++) ...

2020-03-03 15:29:32 72

原创 LEETCODE#125验证回文串

给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。1. 传统的判断ASCII 码方法 bool isPalindrome(string s) { vector<char> ch; for(int i = 0;i<s.size();i++) { if((s[i]>='a'&&...

2020-03-03 15:23:55 103

原创 LEETCODE#119杨辉三角Ⅱ

给定一个非负索引k,其中 k≤33,返回杨辉三角的第 k 行。1. 用vector实现二维数组vector<int> getRow(int rowIndex) { vector<vector<int>> ans(rowIndex+1);//注意行数 for(int i =0;i<rowIndex+1;i++) ...

2020-03-02 18:00:49 128

原创 LEETCODE118杨辉三角Ⅰ

给定一个非负整数numRows,生成杨辉三角的前numRows行。1. 常规写法,一行一行生成vector<vector<int>> generate(int numRows) { vector<vector<int>> ans(numRows); //第一层vector初始化时指明大小 for(int i =0;...

2020-03-02 17:48:03 123

原创 LEETCODE#88合并有序数组

给定两个有序整数数组,将nums2合并到nums1中,使得num1成为一个有序数组。1. 将num2中元素添加到num1中后调用sortvoid merge(vector<int>& nums1, int m, vector<int>& nums2, int n) { for(int j=0;j<n;j++){ nums1...

2020-03-02 15:21:42 67

原创 LEETCODE#69x的平方根

实现 int sqrt(int x) 函数。计算并返回 x 的平方根,其中 x 是非负整数。由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。1. 调用库函数int mySqrt(int x) { return sqrt(x);}2. 二分法int mySqrt(int x) { //注:在中间过程计算平方的时候可能出现溢出,所以用long ...

2020-03-02 15:10:29 93

原创 LEETCODE#83删除链表中的重复元素

给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。1. 双指针法,快指针用于找到重复元素,慢指针用于比较ListNode* deleteDuplicates(ListNode* head) { if(!head||!head->next) return head; ListNode* p=head; while(p->...

2020-03-01 16:50:43 91

原创 LEETCODE#70爬楼梯

假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?给定 n 是一个正整数。1. 经过观察,随着n增加,方法依次为1,2,3,5,8,13构成斐波那契数列。所以可以记录下斐波那契数列的每一位数字。int climbStairs(int n) { if (n == 1) return 1; ...

2020-03-01 16:46:46 71

原创 LEETCODE#461汉明距离

两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目。给出两个整数 x 和 y,计算它们之间的汉明距离。1.利用bitset来处理二进制位int hammingDistance(int x, int y) { int count = 0; bitset<31> a(x); bitset<31> b(y); fo...

2020-03-01 14:02:21 101

原创 LEETCODE#541反转字符串

给定一个字符串和一个整数 k,你需要对从字符串开头算起的每个 2k 个字符的前k个字符进行反转。如果剩余少于 k 个字符,则将剩余的所有全部反转。如果有小于 2k 但大于或等于 k 个字符,则反转前 k 个字符,并将剩余的字符保持原样。1. 条件判断+使用reverse函数string reverseStr(string s, int k) { int num = s.si...

2020-03-01 12:44:41 84

原创 LEETCODE#66加一

给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。你可以假设除了整数 0 之外,这个整数不会以零开头。1. 从后向前找,末位非0直接加1;末位为9则改为0,若前一位非9则加1返回,若前一位为9则加至非9返回;若为99形式,首位置1末位加0。vector<int> plusOne(vector&...

2020-02-29 15:56:40 96

原创 LEETCODE#58最后一个单词的长度

给定一个仅包含大小写字母和空格' '的字符串,返回其最后一个单词的长度。如果不存在最后一个单词,请返回 0 。说明:一个单词是指由字母组成,但不包含任何空格的字符串。输入: "Hello World" 输出: 51. 一开始想把单词全部倒序之后读,但实际上增加了工作量,不如直接利用指针倒着读。先将末尾的空格计数,然后用到第二个空格的字符数减去末尾空格数。int lengthO...

2020-02-29 14:32:06 76

原创 LEETCODE#205同构字符串

给定两个字符串 s 和 t,判断它们是否是同构的。如果 s 中的字符可以被替换得到 t ,那么这两个字符串是同构的。所有出现的字符都必须用另一个字符替换,同时保留字符的顺序。两个字符不能映射到同一个字符上,但字符可以映射自己本身。1. 用两个map分别记录当前位置字符第一次出现的位置bool isIsomorphic(string s, string t) { map&lt...

2020-02-29 13:41:29 99

原创 LEETCODE#35搜索插入位置

给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。可以假设数组中无重复元素。1. 循环搜索法1)while写法int searchInsert(vector<int>& nums, int target) { int ans = 0; while(ans < nums...

2020-02-29 12:42:15 74

原创 LEETCODE#28实现strStr

给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回 -1。1. 暴力法,分情况讨论int strStr(string haystack, string needle) { int slow = 0, fast = 0, flag = -1; if(...

2020-02-28 23:31:28 82

原创 LEETCODE#27移除元素

给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。1. 双指针法,分别从头尾开始。当头指针所指元素是需要移除的元素,则头指针元素与尾指针元素交换,并且尾指针后退一格。当头指针指向...

2020-02-28 23:20:42 136

原创 LEETCODE#21合并有序链表

将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。1. 迭代法,比较原两链表中元素大小后将元素插入新的链表中ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) { ListNode* prehead = new ListNode(-1); ListNode* pre...

2020-02-25 23:04:17 68

原创 LEETCODE#26删除排序数组中的重复项

给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。1. 快慢指针法 int removeDuplicates(vector<int>& nums) { if(nums.size() <= 1) ...

2020-02-25 22:22:07 112

原创 LEETCODE#14最长公共前缀

编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串常规法,用第一个字符串依次作检验string longestCommonPrefix(vector<string>& strs) { string ans; if(!strs.size()) return ans; char ch; int...

2020-02-25 17:23:53 181

原创 LEETCODE#9回文数

判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。常规做法,将数字倒置后比较 bool isPalindrome(int x) { if(x<0||(x%10==0&&x!=0)) return false;//除去特例 unsigned int inv = 0,y =...

2020-02-25 16:55:30 78

原创 LEETCODE#7整数反转

给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。常规求余数倒置法int reverse(int x) { if(x == INT_MIN) return 0; ...

2020-02-23 22:09:29 76

原创 LEETCODE#1两数之和

给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是你不能重复利用这个数组中同样的元素。暴力循环法(MyVersion)vector<int> two;for(int i =0;i < nums.size()-1;++i) //不要越界 ...

2020-02-23 18:45:16 68

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除