![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
leetcode
为春招编程题做准备
小星星+yg
这个作者很懒,什么都没留下…
展开
-
leetcode 141. 环形链表
官解class Solution {public: int num = 0; int pos; bool hasCycle(ListNode *head) { if(head == nullptr || head->next == nullptr) return false; ListNode *fast = head->next,*low = head; while(fast != low){原创 2020-12-18 17:30:13 · 79 阅读 · 1 评论 -
leetcode 136. 只出现一次的数字
官解class Solution {public: int sum; int singleNumber(vector<int>& nums) { sum = nums[0]; for(int i = 1; i < nums.size(); i++){ sum ^= nums[i]; } return sum; }};原创 2020-12-16 19:16:57 · 60 阅读 · 0 评论 -
122. 买卖股票的最佳时机 II(贪心,dp)
官解class Solution {public: int maxProfit(vector<int>& prices) { int n = prices.size(); int ans = 0; for(int i = 1; i < n; i++){ ans += prices[i] - prices[i - 1] > 0 ? prices[i] - prices[i - 1] : 0;原创 2020-12-15 13:49:53 · 66 阅读 · 0 评论 -
leetcode 89格雷编码
官解class Solution {public: vector<int> grayCode(int n){ vector<int> v; v.push_back(0); int head = 1; for(int i = 0; i < n; i++){ for(int j = v.size() - 1; j >= 0; j--){ v.pu原创 2020-12-09 16:04:08 · 96 阅读 · 0 评论 -
leetcode 687最长同值路径
树的最长路径代表的意思是树的两个结点之间的边的条数,刚开始我理解错题目的意思了,以为求的是最多联通的结点数。比如说这组数据:[1,null,1,1,1,1,1,1,null,1]它的最长路径见下图:class Solution {public: int ans = 0; int longestUnivaluePath(TreeNode* root) { solve(root); return ans; } int solv原创 2020-12-09 00:14:08 · 133 阅读 · 0 评论 -
leetcode78子集
官解 vector<vector<int>> v; vector<int> t; void dfs(vector<int> &nums,int i){ if(i == nums.size()){ v.push_back(t); return ; } t.push_back(nums[i]);原创 2020-12-07 22:06:59 · 62 阅读 · 0 评论 -
leetcode 61 旋转链表
class Solution {public: ListNode* rotateRight(ListNode* head, int k) { if(head == nullptr) return nullptr; if(k == 0) return head; ListNode *s = new ListNode(-1); ListNode *p = head; int len = 1; while(p原创 2020-12-07 18:06:35 · 60 阅读 · 0 评论 -
leetcode 59 螺旋矩阵2
class Solution {public: vector<vector<int>> generateMatrix(int n) { if(n == 0) return {}; vector<vector<int>> v(n,vector<int>(n,0)); int up = 0,right = n - 1,down = n - 1,left = 0; int size原创 2020-12-07 18:06:04 · 60 阅读 · 0 评论 -
leetcode 59 螺旋矩阵2
class Solution {public: vector<vector<int>> generateMatrix(int n) { if(n == 0) return {}; vector<vector<int>> v(n,vector<int>(n,0)); int up = 0,right = n - 1,down = n - 1,left = 0; int size原创 2020-12-07 16:37:41 · 82 阅读 · 0 评论 -
leetcode 54 螺旋矩阵
vector<int> spiralOrder(vector<vector<int>>& matrix) { if(matrix.size() == 0) return {}; vector<int> v; int x = -1,y = 0; int mx = matrix[0].size(); int my = matrix.size(); int...原创 2020-12-07 15:42:04 · 70 阅读 · 0 评论 -
leetcode 53 最大字段和
class Solution {public: int maxSubArray(vector<int>& nums) { int pre = 0,max1 = INT_MIN; for(auto &x: nums){ pre = max(x,pre + x);//只取x大还是把前面的最大值也加起来大 max1 = max(max1,pre);原创 2020-12-07 14:15:49 · 78 阅读 · 0 评论 -
leetcode 46全排列
官解class Solution {public: vector<vector<int>> permute(vector<int>& nums) { vector<vector<int>> v; dfs(v,nums,0,nums.size()); return v; } void dfs(vector<vector<int&g原创 2020-12-07 13:10:21 · 66 阅读 · 0 评论 -
leetcode 43 字符串相乘
官解string multiply(string num1, string num2) { if(num1 == "0" || num2 == "0") return "0"; int l1 = num1.size(),l2 = num2.size(); vector<int> v(l1 + l2,0); for(int i = l1 - 1; i >= 0; i--){ int a = num1[i] - '0';原创 2020-12-07 00:45:48 · 102 阅读 · 0 评论 -
leetcode 33 搜索旋转排序数组
官解我们将数组从中间分开成左右两部分的时候,一定有一部分的数组是有序的。可以对有序的部分二分class Solution {public: int search(vector<int>& nums, int target) { int n = nums.size(); int l = 0,r = n - 1,mid; while(l <= r){ mid = (l + r) >&原创 2020-12-06 01:26:18 · 137 阅读 · 0 评论 -
leetcode 23 合并K个有序链表
class Solution {public: ListNode* mergeKLists(vector<ListNode*>& lists) { if(lists.size() == 0) return nullptr; ListNode *temp = nullptr; for(int i = 0; i < lists.size(); i++) temp = mergeTwoLists(temp,lists[i]);原创 2020-12-05 22:39:56 · 75 阅读 · 0 评论 -
leetcode 21 合并两个有序链表
官解class Solution {public: ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) { ListNode *prehead = new ListNode(-1); ListNode *pre = prehead; if(l1 == nullptr) return l2; if(l2 == nullptr) return l1; while(l1原创 2020-12-05 00:56:39 · 125 阅读 · 0 评论 -
leetcode 16 最接近三数之和
官解class Solution {public: int threeSumClosest(vector<int>& nums, int target) { int size = nums.size(); sort(nums.begin(),nums.end()); int best = 0x3fffffff; auto update = [&](int sum){ if(abs(原创 2020-12-04 19:59:23 · 85 阅读 · 0 评论 -
leetcode 15 三数之和
官解 vector<vector<int>> threeSum(vector<int>& nums) { int size = nums.size(); vector<vector<int> > v; sort(nums.begin(),nums.end()); for(int i = 0; i < size; i++){ int k = siz原创 2020-12-04 16:20:38 · 61 阅读 · 0 评论 -
leetcode 1两数之和
官解class Solution {public: vector<int> twoSum(vector<int>& nums, int target) { unordered_map<int, int> hashtable; for (int i = 0; i < nums.size(); ++i) { auto it = hashtable.find(target - nums[i]);原创 2020-12-04 15:38:50 · 137 阅读 · 1 评论 -
leetcode 14 最长公共前缀
官解class Solution {public: string longestCommonPrefix(vector<string>& strs) { if (!strs.size()) { return ""; } int length = strs[0].size(); int count = strs.size(); for (int i = 0; i < l原创 2020-12-04 15:15:34 · 276 阅读 · 0 评论 -
leetcode 11 盛最多水的容器
class Solution {public: int maxArea(vector<int>& height) { int l = 0, r = height.size() - 1; int ans = 0; while (l < r) { int area = min(height[l], height[r]) * (r - l); ans = max(ans, area)原创 2020-12-04 14:10:40 · 62 阅读 · 0 评论 -
leetcode 9 回文数
官解class Solution{public: bool isPalindrome(int x) { bool result; if (x < 0) { return false; } stringstream ss; ss << x; string str, reversedStr; ss >> str原创 2020-12-04 14:06:19 · 56 阅读 · 0 评论 -
leetcode 7 整数反转
官解:class Solution {public: int reverse(int x) { int rev = 0; while (x != 0) { int pop = x % 10; x /= 10; if (rev > INT_MAX/10 || (rev == INT_MAX / 10 && pop > 7)) return 0;原创 2020-12-04 14:01:40 · 59 阅读 · 0 评论 -
leetcode 5 最长回文子串 三种解法
动态规划dp(i,j)={true,i=js[i]==s[j]?true:false,j−i<2dp(i+1,j−1)&&s[i]==s[j],j−i>=2 dp(i,j)=\left\{\begin{aligned}&true , \quad i = j\\&s[i] == s[j]?true:false\quad, j-i<2\\&dp(i+1,j-1)\&\&s[i] == s[j] ,\quad j - i>原创 2020-05-26 17:02:04 · 208 阅读 · 0 评论 -
leetcode 4 寻找两个正序数组的中位数
官解class Solution {public: int getKthElement(const vector<int>& nums1, const vector<int>& nums2, int k) { /* 主要思路:要找到第 k (k>1) 小的元素,那么就取 pivot1 = nums1[k/2-1] 和 pivot2 = nums2[k/2-1] 进行比较 * 这里的 "/" 表示整除原创 2020-12-01 17:08:29 · 207 阅读 · 0 评论 -
快手2020校园招聘秋招笔试--工程C试卷(21题)滑动窗口解决字串
病毒检测时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 32M,其他语言64M小明最近在做病毒自动检测,他发现,在某些library 的代码段的二进制表示中,如果包含子串并且恰好有k个1,就有可能有潜在的病毒。library的二进制表示可能很大,并且子串可能很多,人工分析不可能,于是他想写个程序来先算算到底有多少个子串满足条件。如果子串内容相同,但是开始或者结束位置不一样,则被认为是不同的子串。注:子串一定是连续的。例如"010"有6个子串,分别是 "0, “1”, “0”, “01”原创 2020-12-01 14:45:28 · 153 阅读 · 0 评论 -
letcode 2两数相加
官解class Solution {public: ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) { ListNode *head = nullptr,*tail = nullptr; int carry = 0; while(l1 || l2){ int n1 = l1 != nullptr ? l1->val:0; int n2 =原创 2020-11-30 23:56:40 · 77 阅读 · 0 评论 -
leetcode 767重构字符串
#include<bits/stdc++.h>using namespace std;class Solution {public: string reorganizeString(string S) { int len = S.length(); if(len < 2) return ""; else{ vector<int> v(26,0); int maxcount = -原创 2020-11-30 21:22:28 · 80 阅读 · 0 评论 -
leetcode 8 字符串转换整数 (atoi)
官解刚开始理解错题目的意思了,越做到后面越乱,基本上把这道题的坑都踩了,还好人还在。思路:(1)先找到第一个合法的字符,ind注意初始化一定也要是-1,如果不是-1,当输入空字符串的时候会有问题.(2)把连续的数字拼接成一个新的字符串(3)计算这个字符串的值,注意不能先把值计算出来再去添加符号,那样在计算的时候可能就越界了。#include<bits/stdc++.h>using namespace std; int myAtoi(string s) { string s原创 2020-12-01 23:12:52 · 138 阅读 · 0 评论