数据结构实战-从入门到精通
前言:
博主目前研究方向为网络信息与安全,本科是从底层嵌入式正在跳到后端开发的野生程序猿一只。
今日起更新程序员的必操课程:数据结构与算法,参考题目为Leetcode。
入门篇:
217. 存在重复元素
两种思路:
1.就是利用数组下标一次遍历,只要出现nums[i]=nums[i+1]即可完成遍历排查;
2.使用STL哈希表,遍历nums数组,将值依次放入哈希表当中,期间进行核查,如果预插入的值和哈希表中已经存在的值相等,那么就返回true,否则返回false。
针对哈希表的使用方法,请看链接:
哈希表的常见用法
正常遍历:
class Solution {
public:
bool containsDuplicate(vector<int>& nums) {
sort(nums.begin(), nums.end());
int n = nums.size();
for (int i = 0; i < n - 1; i++) {
if (nums[i] == nums[i + 1]) {
return true;
}
}
return false;
}
};
哈希表:
class Solution {
public:
bool containsDuplicate(vector<int>& nums) {
unordered_set<int> s;
for (int x: nums) {
if (s.find(x) != s.end()) {//find方法如果没有找到就返回的是s.end();
return true;
}
s.insert(x);
}
return false;
}
};
53. 最大子数组和-动态规划
清华考研专业课的动归设置为简单多少有点高看我;
dp动归的参考链接实战:
动态规划实战入门
直接参考大佬们的写法,附上解释说明:
class Solution {
public:
int maxSubArray(vector<int>& nums) {
int pre = 0, maxAns = nums[0];
for (const auto &x: nums) {
pre = max(pre + x, x);
maxAns = max(maxAns, pre);
}
return maxAns;
}
};
参考链接:
哈希表的常见用法
动态规划实战入门
Vector的使用方法:
Stack的使用方法
Queue的使用方法
树的层次遍历以及使用队列遍历过程图
unordered_set中end()与find()的使用