千山万水总有路,勇敢迈出第一步!!!
又是美好的一天呀,早上 5 点必须醒。
我 always 不行~
【言前面】指针很难 👈 反正大家都说难👉 本讲算法题,不难。
想一下,本讲算法题,就下面这几个指针的知识点
- 声明时的 int*; // TYPE_NAME* TYPE_NAME 类型的指针,固定格式
- 取值 *returnType = N; // *POINT_NAME 获取指针存储的数组
- 创建指针变量的 malloc(N*sizeof(TYPE_NAME))
一、吹逼
今日学习内容:指针,说难不难,说简单也难。
大家都说难,我都不敢说简单了 ~ 【画几个内存图,指针瞎指指,DDDD】
是被 指针指来指去 的一天呀 ~~ (ˉ▽ ̄~) 切~~
每个算法不都是,写一句 malloc,写一句 *returnSize 吗?和指针有啥关系~
你要是用 C++、Java、Python、GO,就更加不用自己 *** 作指针了。
BUT,数组是指针,数组名就是一个常量指针,这个要知道的呀~
今日最牛,统计下于当前数字的数字,英文题目:1365. how-many-numbers-are-smaller-than-the-current-number?【忍不住想要选 C 的一道英文选择题 🤦】
暴力枚举 → 计数排序:空间换时间算法的典范,范儿 👇
class Solution {
public:
vector smallerNumbersThanCurrent(vector& nums) {
// 0 <= nums[i] <= 100
// 统计 nums 中元素值出现的个数
vector cnt(101, 0);
for(int i=0; i ret; // 统计结果
for(int i=0; i
二、晒战绩
话不多说,上图~ 👇 没有想到吧,抓耳挠腮 全 绿题
三、写解题报告
题解报告,只写让我有
的那道题!
先来 C++ vector 知识点,一直把 vector 当作数组来用,今天咱们尊重下 vector,学点知识:
>>> C++ vector 底层实现感兴趣的,看下 文1 文2
- 构造函数:vector
ret(nums); // 深拷贝 nums,创建 ret - 构造函数:vector
ret = {}; // 创建空 ret - 构造函数:vector
ret(101, 0); // 创建长度为 101,0 初始化的 ret - 构造函数:vector
ret(101, 0); // 创建长度为 101,0 初始化的 ret - 成员函数:vec.push_back(); // 入
- 成员函数:vec.pop_back(); // 出
- 成员函数:vec.size(); // vec 的容量
- 成员函数:vec.insert(index, e); // e 插入到 index 处
- 成员函数:vec.begin(); // 前置迭代器
- 运算符重载 []:vec[] → 底层估计是 get(index) 啥的吧
vector 只是重载了 [],底层是个数组 而已,而已,而已~
剑指 Offer 58 - II. 左旋转字符串:题目理解 → 字符串砍断,左面放右面,右面放左面。
用 C 和 C++ 分别去实现,感受下 C 面向过程的魅力,同时,体会 C++ 基于面向对象的实现的算法、数据结构,有多好用~
// 上 C 👇
char* reverseLeftWords(char* s, int k){
int n = strlen(s);
char* ret = (char*)malloc((n+1) * sizeof(char));
int j = 0;
for(int i=k; i// 下 C++ 👇
class Solution {
public:
string reverseLeftWords(string s, int n) {
return s.substr(n) + s.substr(0,n);
}
};
';
return ret;
}
// 上 C 👇
char * defangIPaddr(char * address){
int N = strlen(address);
char* ret = (char*)malloc((N+7) * sizeof(char));
int i = 0;
for(int j =0; j// 下 C++ 👇
class Solution {
public:
string defangIPaddr(string address) {
int cnt = 3; // 只有三个点点~
int idx = 0;
while(cnt--) {
idx = address.find('.', idx);
address.replace(idx, 1, "[.]");
idx += 3; // 一个字符,变三个字符,原来 + 1,现在 + 3
}
return address;
}
};
';
return ret;
}
1108. IP 地址无效化:题目理解 → 把 IP 地址那 三个点点,都用中括号包裹一下
1365. 有多少小于当前数字的数字:题目理解 → 把数组中,所有小于当前元素的值,给我统计个数,按顺序整成数组
- 解法 2:空间换时间的典范,范儿 👇 计数排序 👉
class Solution {
public:
string& replace_all(string& str,const string& old_value,const string& new_value) {
while(true) {
string::size_type pos(0); // 括号赋值 等价于 pos = 0;
// find 函数找到不到指定子串时,返回 npos → 静态常量,-1
if((pos=str.find(old_value))!=string::npos) // string::npos 字符串尾指示器
str.replace(pos,old_value.length(),new_value);
else break;
}
return str;
}
string replaceSpace(string s) {
return replace_all(s, " ", "%20");
}
};
// 👆 枚举 double loop 搞定一下子
class Solution {
public:
vector smallerNumbersThanCurrent(vector& nums) {
vector ret(nums.size(), 0);
for(int i=0;i
// 走计数 优化下 👇
class Solution {
public:
vector smallerNumbersThanCurrent(vector& nums) {
// 0 <= nums[i] <= 100
// 统计 nums 中元素值出现的个数
vector cnt(101, 0);
for(int i=0; i ret; // 统计结果
for(int i=0; i
剑指 Offer 05. 替换空格: 题目理解 → 把字符串中的空格,替换成网址中的 %20。
C 实现参考 非法IP。
C++ 的 replace 方法,未提供批量替换功能,自定义一个 replace_all
>>> 👆 C++ 作为 面向对象的先驱,真的是趟水坑🕳,字符串的实现,我懒得吐槽,只能好好学习
四、写给明天
多美美好的一天呀~~ 喜刷刷,喜刷刷 😀😀😀 喜刷刷 刷刷~ 😀😀😀 ~
明早,不起了,反正起不来 (¬︿̫̿¬☆)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)