1.20 - x的平方根 && vector的扩容机制以及删除元素是否会释放内存

目录

1.x的平方根

a.核心思想

b.思路

c.步骤

2.vector的扩容机制以及删除元素是否会释放内存

a.vector的扩容机制

b.vector删除元素是否会释放内存


1.x的平方根

69. x 的平方根 - 力扣(LeetCode)https://leetcode.cn/problems/sqrtx/

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

a.核心思想

使用二分查找法来确定非负整数x的算术平方根的整数部分。因为算术平方根的取值范围在0到x(当x大于1时,当x为0或1时平方根就是其本身),我们可以在这个范围内通过二分查找逐步缩小范围,直到找到最大的整数mid使得mid*mid <= x。

b.思路

① 处理特殊情况,当x为0或1时,直接返回x。

② 初始化二分查找的左右边界,left = 0,right = x。

③ 在左右边界范围内进行二分查找,计算中间值mid,比较mid*mid与x的大小关系:

  • 如果mid*mid == x,直接返回mid。

  • 如果mid*mid < x,说明mid可能是结果或者结果在mid右侧,先记录mid,然后左边界右移(left = mid + 1)。

  • 如果mid*mid > x,说明结果在mid左侧,右边界左移(right = mid - 1)。

④ 最终返回记录的满足条件的最大整数。

c.步骤

① 特殊情况处理。

② 初始化左右边界。

③ 二分查找循环,根据mid*mid与x的关系调整边界。

④ 返回结果。

2.vector的扩容机制以及删除元素是否会释放内存

a.vector的扩容机制

① 触发时机: 当向 vector 插入元素且当前容量不足时触发扩容。

**② 扩容策略:**通常以当前容量的某个倍数(常见为 2 倍)增长,不同编译器实现可能略有差异。新容量确定后,会重新分配一块更大的连续内存空间,将原有元素拷贝到新空间,并释放旧空间。

b.vector删除元素是否会释放内存

① 一般情况: 使用如 erase 等方法删除元素时,vector 不会立即释放内存。它仍然保留原有的容量,以便后续可能继续插入元素,避免频繁扩容开销。

② 释放 内存 方法: 若想释放多余内存,可使用"交换技巧",例如 vector<int>(v).swap(v); (C++98 及之前)或 v.shrink_to_fit(); (C++11 起),请求将容量缩减至与元素数量匹配。但这只是请求,编译器可能不执行。

希望这些内容对大家有所帮助!

感谢大家的三连支持!

相关推荐
啊阿狸不会拉杆12 分钟前
《机器学习导论》第 5 章-多元方法
人工智能·python·算法·机器学习·numpy·matplotlib·多元方法
liu****27 分钟前
2.深入浅出理解虚拟化与容器化(含Docker实操全解析)
运维·c++·docker·容器·虚拟化技术
A9better34 分钟前
C++——不一样的I/O工具与名称空间
开发语言·c++·学习
R1nG8631 小时前
CANN资源泄漏检测工具源码深度解读 实战设备内存泄漏排查
数据库·算法·cann
王老师青少年编程1 小时前
2024年信奥赛C++提高组csp-s初赛真题及答案解析(阅读程序第2题)
c++·题解·真题·初赛·信奥赛·csp-s·提高组
_OP_CHEN1 小时前
【算法基础篇】(五十六)容斥原理指南:从集合计数到算法实战,解决组合数学的 “重叠难题”!
算法·蓝桥杯·c/c++·组合数学·容斥原理·算法竞赛·acm/icpc
MSTcheng.1 小时前
【C++】C++11新特性(三)
开发语言·c++·c++11
田野追逐星光1 小时前
STL容器list的模拟实现
开发语言·c++·list
TracyCoder1231 小时前
LeetCode Hot100(27/100)——94. 二叉树的中序遍历
算法·leetcode
StandbyTime1 小时前
《算法笔记》学习记录-第二章 C/C++快速入门
c++·算法笔记