[研究生冲刺][算法实习生]LeetCode刷题日记(Day9)【欢迎关注,一起努力!Cheers!】
致歉——To Readers & Myself
最近开学,中间断了大半个月,真是对不起(其实是自己又有点懒惰了QAQ)。不过开学以来英语是真的已经学起来了,LLS还是很不错的一个英语口语软件(为防止打广告的嫌疑,这里用缩写代替啦,用过的朋友就知道是哪个APP啦)。从今天开始,为了后面的实习面试,重点会刷剑指Offer啥的了,有更好思路的小伙伴,或者有推荐题目的小伙伴请留言哦~。等再刷一段时间,说不定我还会冲个会员体验一下力扣家的模拟面试啥的(有小伙伴想给我众筹一个月力扣会员吗,嘻嘻)
剑指 Offer 03. 数组中重复的数字
思路:
直接调用排序算法,然后遍历一遍,如果相邻元素大小相等,则返回该元素即可。不过这题看起来简单,其实可以琢磨的地方有许多,如继续压缩时间复杂度等。此时我们可以通过hash来做一个映射。
算法的复杂度:
排序时间复杂度为 O(nlogn) ,遍历时间复杂度为 O(n) ,所以整个算法时间复杂度为 O(nlogn + n) = O(nlogn) 。
代码:
class Solution {
public:
int findRepeatNumber(vector<int>& nums) {
sort(nums.begin(), nums.end());
for(int i = 1; i < nums.size(); ++i)
{
if(nums[i - 1] == nums[i])
{
return nums[i];
}
}
return 0;
}
};
剑指 Offer 04. 二维数组中的查找
思路:
一个是直接暴力遍历二维数组,则时间复杂度为 O(
n
2
n^2
n2) ,这里不提倡。因此用另一种方法来解决,即每次查看当前矩阵的右上角元素x,如果x = target,则返回true,若x > target,则删掉最右边的列,否则删掉最上面的行。
算法的复杂度:
此算法最多遍历行+列次,因此算法时间复杂度为O(m+n)。
代码:
class Solution {
public:
bool findNumberIn2DArray(vector<vector<int>>& matrix, int target) {
if(matrix.size() == 0) return false;
int n = matrix.size();
int m = matrix[0].size();
int i = 0, j = m - 1;
for(int k = 0; k < m + n; ++k)
{
if(i >= n || j < 0)
return false;
if(matrix[i][j] == target)
return true;
else if(matrix[i][j] > target)
--j;
else ++i;
}
return false;
}
};
本文分享了LeetCode刷题经验,重点介绍了剑指Offer系列题目中的数组中重复的数字及二维数组查找问题的高效解法,包括使用排序、hash映射和矩阵特性等技巧。
7005

被折叠的 条评论
为什么被折叠?



