35. 搜索插入位置 58. 最后一个单词的长度

目录

35. 搜索插入位置 

思路

代码 

 58. 最后一个单词的长度

思路1

代码1

思路2

代码2 


扫描二维码关注公众号,回复: 15645387 查看本文章

35. 搜索插入位置 

给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。

请必须使用时间复杂度为 O(log n) 的算法。

示例 1:

输入: nums = [1,3,5,6], target = 5
输出: 2
示例 2:

输入: nums = [1,3,5,6], target = 2
输出: 1
示例 3:

输入: nums = [1,3,5,6], target = 7
输出: 4
 

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/search-insert-position

思路

本题简单,唯一需注意的点是:目标值不存在于数组中时,返回它将会被按顺序插入的位置(按升序),如

示例 2:

输入: nums = [1,3,5,6], target = 2
输出: 1

所以我创建了count变量,利用他来解决这样的情况(本题数组为排序数组

每走一位都和目标值比较一下,元素比目标值小count就++,(count从0开始,这样count的值直接就是该目标值所插入的下标

代码 

int searchInsert(int* nums, int numsSize, int target)
{
    int i = 0;
    int count = 0;
    for(i = 0; i < numsSize; i++)
    {
        if(nums[i] == target)
        {
            return i;
        }
        if(nums[i] < target)
        {
            count++;
        }
    }
    return count;
}

 

 58. 最后一个单词的长度

给你一个字符串 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”。
 

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/length-of-last-word

思路1

暴力解题

i 从最后一位来

 

由这个例子我们知道,最后一个单词后面会有空格这种情况,我们需把空格跳过,

示例 2:

输入:s = "   fly me   to   the moon  "
输出:4

 

之后创建了count变量来计数,注意while循环里i > 0,不然会溢出,力扣会报错 

因为以上没有i = 0;情况(应对"a"这样的),所以要填上,

注意s[i] 不能 等于 ' '(防止这种情况"   ab")

 这几个代码块循序可不能变

代码1

int lengthOfLastWord(char* s)
{
    int len = strlen(s);
    int i = len - 1;
    int count = 0;
    while (s[i] == ' ')
    {
        i--;
    }
    while (s[i] != ' ' && i > 0)
    {
        i--;
        count++;
    }
    if (i == 0 && s[i] != ' ')
    {
        count++;
    }
    return count;
}

思路2

第二种代码更简洁一点,利用了for循环,循环条件写对,就不用考虑溢出情况,

还是从后面开始(i = len - 1),创建count变量来计数,s[i] != ' ',count++;

下面的代码我觉得满巧妙的(o゜▽゜)o☆

如果s[i] == ' '并且count != 0,这个并且就很巧妙ヾ(≧▽≦*)o,

count != 0,就说明这是已经经过了一个单词之后才遇到的空格就该跳出循环啦,之后返回count就行了 

 

代码2 

int lengthOfLastWord(char* s)
{
    int len = strlen(s);
    int i = len - 1;
    int count = 0;
    for(i = len - 1; i >= 0; i--)
    {
        if(s[i] != ' ')
        {
            count++;
        }
        if(s[i] == ' ' && count != 0)
        {
            break;
        }
    }
    return count;
}

 

 ╰(*°▽°*)╯╰(*°▽°*)╯╰(*°▽°*)╯╰(*°▽°*)╯╰(*°▽°*)╯完╰(*°▽°*)╯╰(*°▽°*)╯╰(*°▽°*)╯╰(*°▽°*)╯╰(*°▽°*)╯

猜你喜欢

转载自blog.csdn.net/iiiiiihuang/article/details/130327988