【LeetCode】每日一题&最后一个单词的长度&投票法求解多数元素&异或操作符巧解只出现一次的数字&整数反转

这篇具有很好参考价值的文章主要介绍了【LeetCode】每日一题&最后一个单词的长度&投票法求解多数元素&异或操作符巧解只出现一次的数字&整数反转。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

=========================================================================

个人主页直达:小白不是程序媛

LeetCode系列专栏:LeetCode刷题掉发记

=========================================================================

目录

LeetCode 58.最后一个单词的长度

LeetCode169.多数元素

LeetCode 136.出现一次的数字

LeetCode 7.整数反转


LeetCode 58.最后一个单词的长度

难度:简单

OJ链接

题目描述:

给你一个字符串 s,由若干单词组成,单词前后用一些空格字符隔开。返回字符串中 最后一个 单词的长度。

单词 是指仅由字母组成、不包含任何空格字符的最大子字符串。

示例 1:

输入:s = "Hello World"
输出:5
解释:最后一个单词是“World”,长度为5。

示例 2:

输入:s = "   fly me   to   the moon  "
输出:4
解释:最后一个单词是“moon”,长度为4。

示例 3:

输入:s = "luffy is still joyboy"
输出:6
解释:最后一个单词是长度为6的“joyboy”。

思路讲解:

使用库函数strlen求出字符串长度,定义一个计数器从后往前遍历,如果不是空格就加加,遇到空格就退出,最后返回这个计数器。

注意:有可能最后一个就是空格,也有可能最后几个字符都是空格。

我们要从后向前找到第一个不为空格的字符,从这里开始遍历,找下个空格,计数器加加。

实现代码

int lengthOfLastWord(char * s)
{
int len=strlen(s);
int i=len-1;
int ret=0;
//从尾部开始遍历找到第一个不为空格的位置
while(i>=0&&s[i]==' ')
{
    i--;
}
//从第一个不为空格的位置开始继续遍历,找到下个空格的位置
while(i>=0&&s[i]!=' ')
{
    i--;
    ret++;
}
return ret;
}

LeetCode169.多数元素

难度:简单

OJ链接

题目描述:

给定一个大小为 n 的数组 nums ,返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。

你可以假设数组是非空的,并且给定的数组总是存在多数元素。

示例 1:

输入:nums = [3,2,3]
输出:3

示例 2:

输入:nums = [2,2,1,1,1,2,2]
输出:2

思路讲解:投票法

题目中说到出现次数大于n/2的元素,这表示相同的数一定多于不同的数,我们从第一个数开始默认有一票,遇到相同的数就加一票,不同的数减一票,当票数小于0时代表和这个数不同的数一定多于和这个数相同的数,不可能时此数,然后从此位置开始继续向后遍历。

实现代码

int majorityElement(int* nums, int numsSize){
  int point =nums[0];
  int count=1;
  //默认有一票
  for(int i=1;i<numsSize;i++)
  {
    if(nums[i]==point)
    {
        //后一个和前一个相等加一票
      count++;
    }
    else
    {
      //不相等加一票
      count--;
      if(count<0)
      {
          //小于零时,代表反对票一定多于赞成票,重新开始投票
        point=nums[i];
        count=1;
      }
    }
  }
  return point;
}

LeetCode 136.出现一次的数字

难度:简单

OJ链接

题目描述:

给你一个 非空 整数数组 nums ,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。

你必须设计并实现线性时间复杂度的算法来解决此问题,且该算法只使用常量额外空间。

示例 1 :

输入:nums = [2,2,1]
输出:1

示例 2 :

输入:nums = [4,1,2,1,2]
输出:4

示例 3 :

输入:nums = [1]
输出:1

思路讲解:异或操作符妙用

任何数和0异或不变,两个相同的数异或值为0。我们使用异或这一特点就可以巧解这个题。

只出现一次的数代表出这个数外的其他数都相同,那我们就使用异或操作符,让第一个数和0异或,其他的数和前面的数异或。



int singleNumber(int* nums, int numsSize){
    int point=0;
    for(int i=0;i<numsSize;i++)
    {
        point^=nums[i];
    }
    return point;
}
//nums[3]={ 2, 2, 1}

//point =0^2=2;
//point =2^2=0;
//point =0^1=1;
//所以出现一次的数为1


LeetCode 7.整数反转

难度:中等

OJ链接

题目描述:

给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。

如果反转后整数超过 32 位的有符号整数的范围 [−231,  231 − 1] ,就返回 0。

假设环境不允许存储 64 位整数(有符号或无符号)。

示例 1:

输入:x = 123
输出:321

示例 2:

输入:x = -123
输出:-321

示例 3:

输入:x = 120
输出:21

示例 4:

输入:x = 0
输出:0

解题思路:

首先我们定义一个变量,然后让这个这个变量储存对数的取模,对其在乘以10,对数模10。当这个数大于0的时候一直循环下去是不是就可以得到这个数的反转?

注意:这里我们要考虑极端情况当给的数反转特别大的时候就要返回0;

实现代码

int reverse(int x){
    long long  point=0;
    while(x!=0)
    {
        
        point=point*10+x%10;
        x=x/10;
    }
    if(point>INT_MAX||point<-(INT_MAX))
    {
        return 0;
    }
    return point;
}

 这周的题目分享就到这里了,希望大家可以理解上面的投票法和异或巧解那两道题目,有更好的解决方法可以在评论区多多交流!!!感谢大家的捧场!!!文章来源地址https://www.toymoban.com/news/detail-712984.html

到了这里,关于【LeetCode】每日一题&最后一个单词的长度&投票法求解多数元素&异或操作符巧解只出现一次的数字&整数反转的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 算法leetcode|58. 最后一个单词的长度(rust重拳出击)

    给你一个字符串 s ,由若干单词组成,单词前后用一些空格字符隔开。返回字符串中 最后一个 单词的长度。 单词 是指仅由字母组成、不包含任何空格字符的最大子字符串。 1 = s.length = 10 4 s 仅有英文字母和空格 ’ ’ 组成 s 中至少存在一个单词 面对这道算法题目,二当家的

    2024年02月13日
    浏览(44)
  • 最后一个单词的长度

    58. 最后一个单词的长度 给你一个字符串  s ,由若干单词组成,单词前后用一些空格字符隔开。返回字符串中  最后一个  单词的长度。 单词  是指仅由字母组成、不包含任何空格字符的最大子字符串。 示例 1: 示例 2: 示例 3: 提示: 1 = s.length = 104 s  仅有英文字母和空

    2024年02月20日
    浏览(35)
  • 58. 最后一个单词的长度(Java)

    给你一个字符串 s,由若干单词组成,单词前后用一些空格字符隔开。返回字符串中 最后一个 单词的长度。 单词 是指仅由字母组成、不包含任何空格字符的最大子字符串。 s = “luffy is still joyboy” 6 解释:最后一个单词是长度为6的“joyboy”。

    2024年02月02日
    浏览(118)
  • 【面试经典 150 | 数组】最后一个单词的长度

    本专栏专注于分析与讲解【面试经典150】算法,两到三天更新一篇文章,欢迎催更…… 专栏内容以分析题目为主,并附带一些对于本题涉及到的数据结构等内容进行回顾与总结,文章结构大致如下,部分内容会有增删: Tag:介绍本题牵涉到的知识点、数据结构; 题目来源:

    2024年04月22日
    浏览(47)
  • Rust每日一练(Leetday0020) 最后单词的长度、螺旋矩阵II、排列序列

    目录 58. 最后一个单词的长度 Length of Last Word  🌟 59. 螺旋矩阵 II Spiral Matrix II  🌟🌟 60. 排列序列 Permutation Sequence  🌟🌟🌟 🌟 每日一练刷题专栏 🌟 Rust每日一练 专栏 Golang每日一练 专栏 Python每日一练 专栏 C/C++每日一练 专栏 Java每日一练 专栏 给你一个字符串  s ,由

    2024年02月10日
    浏览(38)
  • 【C++ OJ练习】5.字符串最后一个单词的长度

    字符串最后一个单词的长度_牛客题霸_牛客网 倒着找第一个空格的下标 用下标之间的差来计算  【C++ OJ练习】5.字符串最后一个单词的长度 完

    2024年02月13日
    浏览(31)
  • 【LeetCode】每日一题&&两数之和&&寻找正序数组的中位数&&找出字符串中第一个匹配项的下标&&在排序数组中查找元素的第一个和最后一个位置

    ========================================================================= 主页点击直达: 个人主页 我的小仓库: 代码仓库 C语言偷着笑: C语言专栏 数据结构挨打小记: 初阶数据结构专栏 Linux被操作记: Linux专栏 LeetCode刷题掉发记: LeetCode刷题 算法: 算法专栏  C++头疼记: C++专栏 计算机

    2024年02月08日
    浏览(42)
  • 每日一题——LeetCode1455.检查单词是否为句中其他单词的前缀

    方法一 js函数slice()  将字符串按空格符分割为单词数组,记searchWord的长度为n,分割每个单词的前n位看是否和searchWord匹配 消耗时间和内存情况: 方法二 双指针: 来自leetcode官方题解 链接:1455.检查单词是否为句中其他单词的前缀 使用 start 记录单词的起始,end记录单词结尾

    2024年02月19日
    浏览(41)
  • ( 数组) 209. 长度最小的子数组——【Leetcode每日一题】

    难度:中等 给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+1, ..., numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。 示例 1: 输入:target = 7, nums = [2,3,1,2,4,3] 输出:2 解释:子数

    2024年02月06日
    浏览(27)
  • ( 背包问题) 1049. 最后一块石头的重量 II ——【Leetcode每日一题】

    难度:中等 有一堆石头,用整数数组 stones 表示。其中 stones[i] 表示第 i 块石头的重量。 每一回合,从中选出 任意两块石头 ,然后将它们一起粉碎。假设石头的重量分别为 x 和 y ,且 x = y 。那么粉碎的可能结果如下: 如果 x == y ,那么两块石头都会被完全粉碎; 如果 x !=

    2024年02月08日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包