![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
LeetCode
墨然回首.
图形引擎开发
展开
-
【LeetCode】80. Remove Duplicates from Sorted Array II (删除排序数组中的重复项 II)-C++实现及详细图解
问题描述:(1)创建一个辅助函数,找出下一个不析相等元素的选表private: int nextIndex(const vector<int>& nums, int index){ for(int i = index ; i < nums.size() ; i ++) if(nums[i] != nums[in...原创 2018-08-26 14:45:38 · 547 阅读 · 0 评论 -
[LeetCode] 876. 链表的中间结点-三种方法实现
问题描述:给定一个带有头结点head的非空单链表,返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点示例1:输入:[1,2,3,4,5]输出:此列表中的结点 3 (序列化形式:[3,4,5])返回的结点值为 3 。 (测评系统对该结点序列化表述是 [3,4,5])。注意,我们返回了一个 ListNode 类型的对象 ans,这样:ans.val = 3, a...原创 2019-05-25 07:32:12 · 129 阅读 · 0 评论 -
[LeetCode] 349. Intersection of Two Arrays(两个数组的交集)-使用set
本题是TWO SIGMA公司的面试题。题目描述:使用关联容器set求解。 实现代码如下:#include <iostream>#include <vector>#include <set>using namespace std;// 时间复杂度: O(nlogn)// 空间复杂度: O(n)class Solution {...原创 2018-09-30 18:52:27 · 149 阅读 · 0 评论 -
[LeetCode] 3. Longest Substring Without Repeating Characters(无重复字符的最长子串)-滑动窗口法
本题是 amazon、Adobe、yelp、Bloomberg的面试题。问题描述:方法一:滑动窗口法解题思路:①设定两个滑动指针 i 和 j,区间 s[ i ... j ]为滑动窗口: ②滑动指针j,③知道遇到了重复的字符: 此时记录没有重复字符串的长度。④然后将左指针 i 向右滑动,知道没有重复字符 Note:我们定义一个数组freq...原创 2018-09-23 13:13:09 · 696 阅读 · 0 评论 -
【LeetCode】1. Two Sum(两数之和)-unordered_map实现
本题是一下公司的面试题: 问题描述:问题求解:使用无序容器unordered_map实现:#include <iostream>#include <vector>#include <cassert>#include <unordered_map>using namespace std;// 时间复杂度:O(...原创 2018-10-03 19:22:44 · 715 阅读 · 0 评论 -
【LeetCode】350. Intersection of Two Arrays II(两个数组的交集 II)-map实现
问题描述:实现代码:.#include <iostream>#include <vector>#include <map>using namespace std;// 时间复杂度: O(nlogn)// 空间复杂度: O(n)class Solution {public: vector<int> intersect(...原创 2018-10-01 18:52:58 · 117 阅读 · 0 评论 -
【LeetCode】209.Minimum Size Subarray Sum(长度最小的子数组)-C++实现
本题是facebook 的面试题。问题描述:一、第一种方法:暴力解法该方法在 Leetcode 中会超时!// 时间复杂度: O(n^3)// 空间复杂度: O(1)class Solution {public: int minSubArrayLen(int s, vector<int>& nums) { assert(s ...原创 2018-09-18 17:13:15 · 1157 阅读 · 0 评论 -
【LeetCode】11. Container With Most Water(盛最多水的容器)-C++实现的三种方法
本题是Bloomberg的面试题。问题描述: 一、第一种方法-暴力解法 当我们在面试时想不到解题的方法时,不妨使用暴力解法,双重遍历数组。当 i = 0 时,使用指针 j 遍历数组,找到第一轮的最大值 area:当i = 2 ,使用指针 j 遍历数组,找到第二轮的最大值 area:直到 指针 i 遍历完成。 实现代码:class Solution...原创 2018-09-16 11:47:26 · 1063 阅读 · 0 评论 -
【LeetCode】345.Reverse Vowels of a String(反转字符串中的元音字母)-C++实现
本题为谷歌面试题。问题描述:一、第一种方法:对撞指针法#include <iostream>#include <vector>#include <string>#include <cassert>#include <stdexcept>using namespace std;/// Two Pointe...原创 2018-09-11 19:20:15 · 286 阅读 · 0 评论 -
【LeetCode】344. Reverse String(反转字符串)-C++实现
问题描述:第一种方法:对撞指针#include <iostream>using namespace std;/// Two Pointers/// Time Complexity: O(n)/// Space Complexity: O(1)class Solution {public: string reverseString(string s)...原创 2018-09-09 15:56:01 · 407 阅读 · 0 评论 -
【LeetCode】167. Two Sum II - Input array is sorted(两数之和 II - 输入有序数组)-暴力解法、二分查找法、对撞指针法
本题是亚马逊的面试题。题目描述:一、第一种方法-暴力解法 当我们没有头绪,想不到更好的方法的时候,我们不妨用比较笨的方法来求解。使用双重循环: for(int i = 0 ; i < numbers.size() ; i ++) for(int j = i+1 ; j < numbers.size() ; j ++) ...原创 2018-09-07 17:30:30 · 503 阅读 · 0 评论 -
【LeetCode】215.Kth Largest Element in an Array(数组中的第K个最大元素)-快速排序法-C++实现
本题是一道经典的算法题,也是facebook、MicroSoft、amazon、Bloomberg、Apple的面试题。问题描述:(1)首先,我们定义一个随机数组,查找数组中第二大的元素: vector<int> nums1 = { 3, 2, 1, 5, 6, 4 }; cout << Solution().findKthLargest(nums1, ...原创 2018-09-04 18:55:41 · 291 阅读 · 0 评论 -
【LeetCode】125.Valid Palindrome(验证回文串)-C++实现
本题是Facebook、Microsoft、Uber、Zenerfits的面试题。 题目描述: 一、第一种方法(1)使用双指针,i 和 j 同时遍历: bool isPalindrome(string s) { int i = next_alpha_numeric(s, 0); int j = prev_alpha_numeric(s, (int)s.siz...原创 2018-09-08 17:12:44 · 1032 阅读 · 1 评论 -
【LeetCode】26. Remove Duplicates from Sorted Array (删除排序数组中的重复项)-C++实现的两种方法
问题描述:一、第一种解题方法(1)双指针法(2)数组完成排序后,我们可以放置两个指针 i和 j,其中 i是慢指针,而 j 是快指针。 只要 nums[i] = nums[j],我们就增加 j 以跳过重复项。(3)当我们遇到 nums[j]≠nums[i] 时,跳过重复项的运行已经结束,因此我们必须把它(nums[j])的值复制到 nums[i + 1]。然后递增...原创 2018-08-25 20:47:49 · 2376 阅读 · 2 评论 -
【LeetCode】88.Merge Sorted Array(合并两个有序数组)-C++实现及详细图解
问题描述:问题解答: (1) 定义两个数组的元素个数 m ,n; vector<int> nums1 = { 1, 3, 5, 7 }; int m = (int)nums1.size(); vector<int> nums2 = { 2, 4, 6 }; int n = (int)nums2.size();(2)向数组 nums1 中push_b...原创 2018-09-01 13:55:53 · 936 阅读 · 0 评论 -
【LeetCode】27. Remove Element(移除元素)-C++实现的两种方法
问题描述: 一、第一种解题方法(1)使用双指针发val = 3;(2)若nums[i] = val i++,(3)如果 nums[i] != val则 nums[ j ] = nums[ i ]然后 j++ ;(4)完整的实现代码#include <iostream>#include <vector>#incl...原创 2018-08-23 11:37:58 · 2468 阅读 · 2 评论 -
【LeetCode】75. Sort Colors(颜色排序)-C++实现的两种方法及超详细图解
问题描述:一、第一种解题方法-计数排序法 (1)分别统计0,1,2的元素个数 int count[3] = {0}; // 存放0, 1, 2三个元素的频率 for(int i = 0 ; i < nums.size() ; i ++){ assert(nums[i] >= 0 && nu...原创 2018-08-27 13:40:58 · 1624 阅读 · 0 评论 -
【LeetCode】283. Move Zeroes(移动零)-C++实现及其3种优化方法
问题描述:一、常规解法(1) 基本实现思路先将数组中非零的元素取出来:然后将非零元素放回到数组中: 最后将剩余的元素赋予0: (2)代码实现// 时间复杂度: O(n)// 空间复杂度: O(n)class Solution {public: void moveZeroes(vector<int>& nums) ...原创 2018-08-22 20:53:22 · 816 阅读 · 0 评论 -
[LeetCode] 230. 二叉搜索树中第K小的元素-含测试用例
题目描述:给定一个二叉搜索树,编写一个函数kthSmallest来查找其中第k个最小的元素。说明:你可以假设 k 总是有效的,1 ≤ k ≤ 二叉搜索树元素个数。示例:完整代码实现:#include <iostream>using namespace std;/// Definition for a binary tree node.st...原创 2019-07-08 08:42:32 · 267 阅读 · 0 评论