2021-10-07每日刷题打卡

力扣——每日一题

434. 字符串中的单词数

统计字符串中的单词个数,这里的单词指的是连续的不是空格的字符。

请注意,你可以假定字符串里不包括任何不可打印的字符。

示例:

输入: “Hello, my name is John”
输出: 5
解释: 这里的单词是指连续的不是空格的字符,所以 “Hello,” 算作 1 个单词。

一眼出,创建一个num=0,一个字符串str。开始遍历s,判断s[i]是否为“ ”(ascII码为32)(注意,这里一个“,”也算是单词,所以只判断空格不判断逗号),如果不为空格就str++,如果是空格就再判断str是不是空字符串,如果不为空就说明有单词了,num++,用clear吧字符串str清空,继续遍历重复如上操作。在遍历结束后再次判断str是不是空,因为有可能没遇到空格遍历就结束了,如果str不为空num就++,最后return num即可。

class Solution {
public:int countSegments(string s) {int num=0;;string str;for(int i=0;i<s.size();i++){if(s[i]!=32){str+=s[i];}else{if(str.size()!=0){num++;str.clear();}}}if(str.size()!=0){num++;str.clear();}return num;}
};

剑指 Offer II 022. 链表中环的入口节点

给定一个链表,返回链表开始入环的第一个节点。 从链表的头节点开始沿着 next 指针进入环的第一个节点为环的入口节点。如果链表无环,则返回 null。

为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意,pos 仅仅是用于标识环的情况,并不会作为参数传递到函数中。

说明:不允许修改给定的链表。

示例 1:

输入:head = [3,2,0,-4], pos = 1
输出:返回索引为 1 的链表节点
解释:链表中有一个环,其尾部连接到第二个节点。

第一个想法:

创建一个map容器mymap,用Listnode*做key值,int做val值计算节点出现的次数,开始遍历,当head为NULL时退出遍历,用mymap[head]++的方式来计算出现过的节点,然后判断mymap[head]的val值,如果大于1就说明这个节点已经出现过两次了,直接返回这个节点就行。

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode(int x) : val(x), next(NULL) {}* };*/
class Solution {
public:ListNode* detectCycle(ListNode* head) {unordered_map<ListNode*, int>mymap;while (head != NULL){mymap[head]++;if (mymap[head] > 1){return head;}head = head->next;}return {};
}
};

但是由于用了unordered_map,占用内存就很大了,而且也不够快。。

​ 于是在大佬的指点下,第二个方法诞生了:

创建两个快慢指针p和q,一开始都指向head,p是慢指针,一次只走一步,q是快指针,一次走两步,就是每次遍历p和q拉开一个节点的距离,那么如果链表有环,必然p和q会重合,如果没有环q就会为null,加个判断,当q->next=NULL或q为NULL时返回NULL(即表示没有环)。当p和q第一次重合时,我们来看一下当前的情况,首先根据我们设定的快慢指针的速度,p走过的节点数为x,那么q走过的节点数就是p的两倍即2x,他们俩重合,就说明q走过的路程是x+n*b,n是走过的圈数,b是环的长度,转换一下就是,p走过的路程是nb,q走过的路程是2nb。然后,我们需要的环的第一个节点位置是在a+nb,a是链表中不属于环的前置节点,而p的位置是nb,也就是说只要p在走过a个节点,所在的位置就是我们要的环第一个节点了。那么怎么知道a是多少,在我们的设定里,a是不属于环的前置节点,那么只要我们把q移回开头的head,然后p和q一起走,这样当p和q重逢的时候,那个位置就是我们需要的节点了!

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode(int x) : val(x), next(NULL) {}* };*/
class Solution {
public:ListNode *detectCycle(ListNode *head) {ListNode *fast = head, *slow = head;while (true) {if (fast == nullptr || fast->next == nullptr) return nullptr;fast = fast->next->next;slow = slow->next;if (fast == slow) break;}fast = head;while (slow != fast) {slow = slow->next;fast = fast->next;}return fast;}};

相比第二个方法因为没有用unordered_map,所以占用内存相较小了点,而且运行速度也快了很多!

2021-10-07每日刷题打卡相关推荐

  1. 2022.10.14每日刷题打卡

    リモコン 题意: 题目描述: 高桥君要调整空调的设定温度.现在的设定温度是A度,而他想调到B度. 空调遥控器按一次可以: 上调或下调1度 上调或下调5度 上调或下调10度 高桥君想求出从A调到B度的最 ...

  2. 2022-04-14每日刷题打卡

    2022-04-14每日刷题打卡 代码源--每日一题 上帝的集合 - 题目 - Daimayuan Online Judge 题目描述 现在上帝有一个空集合,现在他命令你为他执行下列三种操作 n 次, ...

  3. 2022-04-01每日刷题打卡

    2022-04-01每日刷题打卡 代码源--每日一题 Lusir的游戏 - 题目 - Daimayuan Online Judge Lusir 正在玩一个古老的基于 DOS 的游戏. 游戏中有 N+1 ...

  4. 2022-03-10每日刷题打卡

    2022-03-10每日刷题打卡 力扣--每日一题 589. N 叉树的前序遍历 给定一个 n 叉树的根节点 root ,返回 其节点值的 前序遍历 . n 叉树 在输入中按层序遍历进行序列化表示,每 ...

  5. 2022-03-02每日刷题打卡

    2022-03-02每日刷题打卡 代码源--div2每日一题 Alice的德州扑克 - 题目 - Daimayuan Online Judge 德州扑克是目前世界上最流行的扑克游戏,全世界有众多相关的 ...

  6. 2022-03-03每日刷题打卡

    2022-03-03每日刷题打卡 力扣--每日一题 258. 各位相加 给定一个非负整数 num,反复将各个位上的数字相加,直到结果为一位数.返回这个结果. 示例 1: 输入: num = 38 输出 ...

  7. 2022-03-31每日刷题打卡

    2022-03-31每日刷题打卡 代码源--每日一题 完美数 - 题目 - Daimayuan Online Judge 对于给定的数字 a , b ,当整数 n 在十进制下的所有数位都为 a 或 b ...

  8. 2022-02-15每日刷题打卡

    2022-02-15每日刷题打卡 AcWing--算法基础 900. 整数划分 - AcWing题库 一个正整数 n 可以表示成若干个正整数之和,形如:n=n1+n2+-+nk,其中 n1≥n2≥-≥ ...

  9. 2021-11-15每日刷题打卡

    2021-11-15每日刷题打卡 AcWing--算法基础 AcWing 794. 高精度除法 - AcWing 给定两个非负整数(不含前导 00) A,B,请你计算 A/B 的商和余数. 输入格式 ...

  10. 2022-04-27每日刷题打卡

    2022-04-27每日刷题打卡 代码源--每日一题 素数之欢 - 题目 - Daimayuan Online Judge 现给定两个 四位素数 a,b. 你可以执行多次下面的操作: 修改数字 a 的 ...

最新文章

  1. 在Simulink中创建库
  2. Forrester发表2010年度MSS市场分析报告
  3. python和docker交互_jupyter notebook 连接服务器docker中python环境
  4. ETL工具Kettle使用
  5. 2015-2016前端架构体系技术
  6. 登录系统_执照管理系统登录与执照转换操作指南
  7. 10,求一个double型数据base的整数次方《剑指offer》
  8. jQuery回调、递延对象总结(中篇) —— 神奇的then方法
  9. 【转】开发板上修改时间方法
  10. 赏析角度有哪些_名句鉴赏题从哪些角度入手鉴赏?一线名师告诉你:五个角度...
  11. 家用智能摄像头横评:小米、华为海雀、TP-LINK、智汀
  12. 芯片尺寸越做越小,晶圆划片刀的选择至关重要
  13. python 计算置信区间,Python求解正态分布置信区间
  14. python substract_Python layers.Subtract方法代码示例
  15. [BZOJ1779][Usaco2010 Hol]Cowwar 奶牛战争(最大流)
  16. Jetson nano 使用ROS 实现串口通信,并且解析通信协议(C++)
  17. 完美解决:*.vmx是由VMware产品创建,但该产品与此版VMware workstation不兼容因此无法使用…
  18. leetcode 跳跃游戏系列 c++
  19. opencv中meanshift和camshift函数的使用
  20. java电话正则屏蔽_java针对电话号码正则匹配实例

热门文章

  1. STM32基于库函数新建工程模板
  2. MEF 元数据设计原理
  3. 学习记录---8255A简介及使用方法
  4. Ffmpeg 将视频分解成多张图片以及多张图片合成视频
  5. win7 、vistar、server2008 R2 、各种64位系统 安装局域网共享打印机,找不到驱动的问题
  6. 艾伟_转载:用C#打造quot;QQ对战平台挤房器quot;
  7. PX4飞控手动位置控制POSCTL模式的实现流程
  8. FastStone Capture安装、注册及使用教程(截屏、滚动截图、录屏、图片编辑工具)
  9. Vue3视频播放器组件Vue3-video-play入门教程
  10. sklearn之train_test_split()函数各参数