0.序

以后不做后端开发是不是就用不到C++了?真香。话不多说,我已经躺倒在第一题上了。不贴题目了,持续更新。

1.两数之和

原文:https://www.cnblogs.com/grandyang/p/4130379.html

解1:

搬过来是搬过来了,理解了才是自己的。但是理解也要好久啊o(╥﹏╥)o。

class Solution {
public: //公有,谁都能调用这里面的东西
vector<int> twoSum(vector<int>& nums, int target) { //vector<int>是返回值,twoSum是函数名
unordered_map<int, int> m; //哇,m是一个哈希表,元素无序但是搜索的时间复杂度是O(1),然后空间复杂度高了呗,但是LeetCode里谁快谁是大哥
vector<int> res;
for (int i = ; i < nums.size(); ++i) { //由值得到下标
m[nums[i]] = i;
}
for (int i = ; i < nums.size(); ++i) {
int t = target - nums[i];
if (m.count(t) && m[t] != i) { //t存在且不是它自己,count()统计了t出现的次数
res.push_back(i); //把i放进一个叫res的容器
res.push_back(m[t]); //知道了t的下标,把它放进容器
break; //跳出for循环
}
}
return res;
}
};

解2:

class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) { //这里加一个&到底是干嘛的呢
unordered_map<int, int> m; //又是一个哈希表
for (int i = ; i < nums.size(); ++i) { //喵的,上面两个for循环这里直接就一个了,原理都是一样的
if (m.count(target - nums[i])) {
return {i, m[target - nums[i]]};
}
m[nums[i]] = i;
}
return {};
}
};

解3:

好的,接下来让我自己来写一个时间复杂度超高的解。emmm,执行时间108ms,是上面两个解的13.5倍。要不要先判断非空呀?

class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
for (int i=; i<nums.size(); i++)
for (int j=i+; j<nums.size(); j++)
if (target == nums[i]+nums[j]) return{i,j};
return {};
}
};

2018-12-6 提交


 2.两数相加

原文:https://blog.csdn.net/qq_32805671/article/details/79883391

解:

链表的知识,在数据结构里学过,看了下面的代码才想起来怎么用,哭。

/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {} //带参数的构造函数
* };
*/
class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
ListNode *result = new ListNode(); //给0分配内存,作为头结点
ListNode *tmp = result; //temporal,临时指针tmp
int sum = ;
while(l1 || l2){
if(l1){
sum += l1->val;
l1 = l1->next;
}
if(l2){
sum += l2->val;
l2 = l2->next;
}
tmp->next = new ListNode(sum%);
sum /= ; //如果sum的值大于等于10的话是要进1位的
tmp = tmp->next;
} //while
if(sum)
tmp->next = new ListNode();
return result->next;
} //addTwoNumbers
}; //class Solution

2018-12-7 提交


 3. 无重复字符的最长子串

原文:https://www.cnblogs.com/ariel-dreamland/p/8668286.html

解1:

class Solution
{
public:
int lengthOfLongestSubstring(string s){
int m[] = {}, res = , left = ;//ASCII有256个字符
for (int i = ; i < s.size(); ++i){
if(m[s[i]]==||m[s[i]]<left){//字符串中第i个元素以前没出现过,或出现在很左边的位置
res = max(res, i-left+);
}else{
left=m[s[i]];
}
m[s[i]]=i+;//为了和缺省的0区分,所以要+1吧
}
return res;
}
};

enmm,花了一个小时才大概搞懂一题的一个解哟,还没完呢。从sublime复制过来的注释是绿色的耶。

2018-12-8 提交

解2:

解1的简化。

class Solution {
public:
int lengthOfLongestSubstring(string s) {
vector<int> m(, -);
int res = , left = -;
for (int i = ; i < s.size(); ++i) {
left = max(left, m[s[i]]);
m[s[i]] = i;
res = max(res, i - left);
}
return res;
}
};

解3:

class Solution {
public:
int lengthOfLongestSubstring(string s) {
set<char> t;
int res = , left = , right = ;
while (right < s.size()) {
if (t.find(s[right]) == t.end()) {
t.insert(s[right++]);
res = max(res, (int)t.size());
} else {
t.erase(s[left++]);
}
}
return res;
}
};

解4:

class Solution {
public:
int lengthOfLongestSubstring(string s) {
int res = , left = , i = , n = s.size();
unordered_map<char, int> m;
for (int i = ; i < n; ++i) {
left = max(left, m[s[i]]);
m[s[i]] = i + ;
res = max(res, i - left + );
}
return res;
}
};

2018-12-9 提交


-

领扣[LeetCode]从零开始[使用C++][1,10]的更多相关文章

  1. 领扣(LeetCode)第三大的数 个人题解

    给定一个非空数组,返回此数组中第三大的数.如果不存在,则返回数组中最大的数.要求算法时间复杂度必须是O(n). 示例 1: 输入: [3, 2, 1] 输出: 1 解释: 第三大的数是 1. 示例 2 ...

  2. 领扣(LeetCode)删除链表中的节点 个人题解

    请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点,你将只被给定要求被删除的节点. 现有一个链表 -- head = [4,5,1,9],它可以表示为: 4 -> 5 -> 1 - ...

  3. 【力扣leetcode】-787. K站中转内最便宜的航班

    题目描述: 有 n 个城市通过一些航班连接.给你一个数组 flights ,其中 flights[i] = [fromi, toi, pricei] ,表示该航班都从城市 fromi 开始,以价格 p ...

  4. 领扣-754 到达终点数字 Reach a Number MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  5. 领扣-1/167 两数之和 Two Sum MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  6. 力扣Leetcode 179. 最大数 EOJ 和你在一起 字符串拼接 组成最大数

    最大数 力扣 给定一组非负整数,重新排列它们的顺序使之组成一个最大的整数. 示例 1: 输入: [10,2] 输出: 210 示例 2: 输入: [3,30,34,5,9] 输出: 9534330 说 ...

  7. 领扣-5 最长回文子串 Longest Palindromic Substring MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  8. 领扣-两数之和-Python实现

    领扣每日一题 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能重复利用这个 ...

  9. 领扣-121/122/123/188 最佳买卖时机 Best Time to Buy and Sell MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

随机推荐

  1. JavaScript监控输入框字数变化,超出限制则禁止输入

    JavaScript监控输入框字数变化,超出则禁止输入 不废话,给你看看效果: 1.无输入状态: 2.输入三个字符: 3.超出5个后报错: 现在粘出代码,首先是html代码: <body> ...

  2. Spring data JPA 理解(默认查询 自定义查询 分页查询)及no session 三种处理方法

    简介:Spring Data JPA 其实就是JDK方式(还有一种cglib的方式需要Class)的动态代理 (需要一个接口 有一大堆接口最上边的是Repository接口来自org.springfr ...

  3. Struts2知识点小结(四)--拦截器与注解开发

    一.Struts2的拦截器(interceptor) 作用:当请求进入struts2框架后(进入之前可以用filter进行拦截),想对请求进行拦截操作(功能增强.权限控制),需要拦截器组件 1.str ...

  4. 选课(树形DP)

    题目描述 在大学里每个学生,为了达到一定的学分,必须从很多课程里选择一些课程来学习,在课程里有些课程必须在某些课程之前学习,如高等数学总是在其它课程之前学习.现在有N门功课,每门课有个学分,每门课有一 ...

  5. mybatis报错:查询一对多或多对多时只返回一条数据的问题

    问题: 使用映射文件实现查询一对多或多对多时只返回一条数据问题 解决方法: 导致这种情况出现的问题是因为两个表中的主键是一样所以出现了数据覆盖问题. 解决方式一:修改数据库表中的主键(这种方法比较麻烦 ...

  6. ubuntu 14.04离线安装docker和docker compose

    准备安装包 1.下载docker docker支持以下版本的ubuntu系统Artful 17.10 (Docker CE 17.11 Edge)Zesty 17.04Xenial 16.04 (LT ...

  7. POJ2553 汇点个数(强连通分量

    The Bottom of a Graph Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 12070   Accepted: ...

  8. 学习RUNOOB.COM进度一

    了解MongoDB 由C++语言编写的,是一个基于分布式文件存储的开源数据库系统.在高负载的情况下,添加更多的节点,可以保证服务器性能. 特点 面向文档,操作简单容易 设置任何索引,实现更快排序 本地 ...

  9. 最小费用最大流模板 洛谷P3381

    题目描述 如题,给出一个网络图,以及其源点和汇点,每条边已知其最大流量和单位流量费用,求出其网络最大流和在最大流情况下的最小费用. 输入输出格式 输入格式: 第一行包含四个正整数N.M.S.T,分别表 ...

  10. python2.7练习小例子(七)

        7):题目:将一个列表的数据复制到另一个列表中.     程序分析:使用列表[:].     程序源代码: #!/usr/bin/python # -*- coding: UTF-8 -*- ...