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. redis的事务、主从复制、持久化

    redis事务 和其它数据库一样,Redis作为NoSQL数据库也同样提供了事务机制.在Redis中, MULTI/EXEC/DISCARD/WATCH这四个命令是我们实现事务的基石.Redis中事务 ...

  2. Spring知识点总结(三)之Spring DI

    1. IOC(DI) - 控制反转(依赖注入) 所谓的IOC称之为控制反转,简单来说就是将对象的创建的权利及对象的生命周期的管理过程交由Spring框架来处理,从此在开发过程中不再需要关注对象的创建和 ...

  3. JWT如何在Spring Cloud微服务系统中在服务相互调时传递

    转载请标明出处: http://blog.csdn.net/forezp/article/details/78676036 本文出自方志朋的博客 在微服务系统中,为了保证微服务系统的安全,常常使用jw ...

  4. 轻量ORM-SqlRepoEx (五) 存储过程操作

    .Net平台下兼容.NET Standard 2.0,一个实现以Lambda表达式转转换标准SQL语句,使用强类型操作数据的轻量级ORM工具,在减少魔法字串同时,通过灵活的Lambda表达式组合,实现 ...

  5. 剑指offer js算法练习(1-10)

    1.二维数组中的查找       在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数, ...

  6. Configuration 中无法自动注入依赖于component的bean

    出现问题时我这样使用依赖注入 @Configuration public class WebServiceConfig { @Autowired private IMessageWebService ...

  7. java程序员所必须掌握的内容

    以下内容有待细化,并用于考察员工的水平! 从低的往高级的说. 初级 1.掌握java语法 oop+io+网络 2.基本的数据结构 3.基本的算法-例如排序,合并 4.基本的几个javaee框架 spr ...

  8. mysql 中的存储过程

    创建一个简单的存储过程 存储过程proc_adder功能很简单,两个整型输入参数a和b,一个整型输出参数sum,功能就是计算输入参数a和b的结果,赋值给输出参数sum: 几点说明: DELIMITER ...

  9. Ehcache基于java API实现

    上代码: package com.utils.cacheutils; import com.situopenapi.constant.EhcacheConstants; import com.situ ...

  10. js函数的节流和防抖

    js函数的节流和防抖 用户浏览页面时会不可避免的触发一些高频度触发事件(例如页面 scroll ,屏幕 resize,监听用户输入等),这些事件会频繁触发浏览器的重拍(reflow)和重绘(repai ...