前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【优选算法题练习】day7

【优选算法题练习】day7

作者头像
摘星
发布2023-10-15 15:54:28
1560
发布2023-10-15 15:54:28
举报
文章被收录于专栏:C/C++学习

一、35. 搜索插入位置

1.题目简介

35. 搜索插入位置 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。

在这里插入图片描述
在这里插入图片描述

2.解题思路

3.代码

代码语言:javascript
复制
class Solution {
public:
    int searchInsert(vector<int>& nums, int target) {
        int left = 0, right = nums.size() - 1;
        while(left <= right)
        {
            int mid = left + (right - left) / 2;
            if(nums[mid] < target)
            {
                left = mid + 1;
            }
            else if(nums[mid] > target)
            {
                right = mid - 1;
            }
            else
            {
                return mid;
            }
        }
        return left;
    }
};

4.运行结果

在这里插入图片描述
在这里插入图片描述

二、69. x 的平方根

1.题目简介

69. x 的平方根 给你一个非负整数 x ,计算并返回 x 的 算术平方根 。 由于返回类型是整数,结果只保留 整数部分 ,小数部分将被 舍去 。 注意:不允许使用任何内置指数函数和算符,例如 pow(x, 0.5) 或者 x ** 0.5 。

在这里插入图片描述
在这里插入图片描述

2.解题思路

3.代码

代码语言:javascript
复制
class Solution {
public:
    int mySqrt(int x) {
        if(x < 1) return 0;
        int left = 1, right = x;
        while(left < right)
        {
            long long mid = left + (right - left + 1) / 2;
            if(mid * mid <= x)
            {
                left = mid;
            }
            else
            {
                right = mid - 1;
            }
        }
        return left;
    }
};

4.运行结果

在这里插入图片描述
在这里插入图片描述

三、852. 山脉数组的峰顶索引

1.题目简介

852. 山脉数组的峰顶索引 符合下列属性的数组 arr 称为 山脉数组 : arr.length >= 3 存在 i(0 < i < arr.length - 1)使得: arr[0] < arr[1] < … arr[i-1] < arr[i] arr[i] > arr[i+1] > … > arr[arr.length - 1] 给你由整数组成的山脉数组 arr ,返回满足 arr[0] < arr[1] < … arr[i - 1] < arr[i] > arr[i + 1] > … > arr[arr.length - 1] 的下标 i 。 你必须设计并实现时间复杂度为 O(log(n)) 的解决方案。

在这里插入图片描述
在这里插入图片描述

2.解题思路

3.代码

代码语言:javascript
复制
class Solution {
public:
    int peakIndexInMountainArray(vector<int>& arr) {
        int left = 1, right = arr.size() - 2;
        while(left < right)
        {
            int mid = left + (right - left + 1) / 2;
            if(arr[mid] > arr[mid - 1])//如果mid所处位置是上升的,则我们要在mid + 1~right区间寻找
            {
                left = mid;
            }
            else//如果mid所处位置是下降的,则我们要在left~mid-1区间寻找
            {
                right = mid - 1;
            }
        }
        return left;
    }
};

4.运行结果

在这里插入图片描述
在这里插入图片描述

总结

今天是算法练习的第7天。 只要功夫深,铁杵磨成针,继续加油! 题目来源:力扣(LeetCode),著作权归领扣网络所有。 如果本篇文章对你有所启发的话,希望可以多多支持作者,谢谢大家!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-10-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、35. 搜索插入位置
    • 1.题目简介
      • 2.解题思路
        • 3.代码
          • 4.运行结果
          • 二、69. x 的平方根
            • 1.题目简介
              • 2.解题思路
                • 3.代码
                  • 4.运行结果
                  • 三、852. 山脉数组的峰顶索引
                    • 1.题目简介
                      • 2.解题思路
                        • 3.代码
                          • 4.运行结果
                          • 总结
                          领券
                          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档