每周完成一个ARTS
每周至少做一个 leetcode 的算法题
阅读并点评至少一篇英文技术文章
学习至少一个技术技巧
分享一篇有观点和思考的技术文章。
(也就是 Algorithm、Review、Tip、Share 简称ARTS)
时间复杂度:O(nlogn)
思路:使用快速排序,将数组排序,然后找到第k个最大的元素。这里需要复习一下快速一下快速排序的实现方法。
int partition(vector<int> &vec, int left, int right)
{
int base = vec[left];
while(left < right)
{
while(vec[right] >= base && left < right)
right --;
swap(vec[left], vec[right]);
while(vec[left] <= base && left < right)
left ++;
swap(vec[left], vec[right]);
}
return left;
}
int fast_sort(vector<int> &vec, int left, int right)
{
if (left < right)
{
int point = partition(vec, left, right);
fast_sort(vec, left, point - 1);
fast_sort(vec, point + 1, right);
}
return 0;
}
int findKthLargest(vector<int> &nums, int k)
{
if (k > nums.size())
return 0;
fast_sort(nums, 0, nums.size() - 1);
return nums[nums.size() - k];
}
时间复杂度:O(nlogn)
思路:利用快排的思想,所获取的patiton即已经排好序的位置,将其与倒数第k的位置作比较。
若相等,则正好是所求的第k大位置;
若小于,则继续对[patition + 1, high]求patition;
若大于,则继续对[low, patition - 1]求pattion。
int partition(vector<int> &vec, int left, int right)
{
int base = vec[left];
while(left < right)
{
while(vec[right] >= base && left < right)
right --;
swap(vec[left], vec[right]);
while(vec[left] <= base && left < right)
left ++;
swap(vec[left], vec[right]);
}
return left;
}
int findKthLargest(vector<int> &nums, int k)
{
if (k > nums.size())
return 0;
int point = 0;
int low = 0, high = nums.size() - 1;
int dest = nums.size() - k;
while(1)
{
point = partition(nums, low, high);
if (point == dest)
return nums[dest];
else if (point > dest)
high = point - 1;
else
low = point + 1;
}
return 0;
}
go语言官方文档,主要介绍了在win/mac/liunux下载、安装、测试、卸载go语言发布包的方法
函数可添加0个或多个参数
函数参数变量名放在类型之前,返回值类型写在末尾
如果函数参数有同一类型变量,则可以将所有类型移除,只在最后添加一个类型
函数支持返回多个结果,函数调用者需要以:=来进行接收结果,对应地返回值类型需要以()写在函数名末尾
返回值重命名,返回值可以函数顶部作为已定义的变量,return返回没有参数,可以裸返回,这种情况应该只用于短函数中,如果用于长函数会损害可读性
var声明变量列表,类型需要写在最后
var后可添加变量初始化
在函数内部可使用:=来初始化变量,不需要写类型,可根据初始化值的类型自动判断,在函数外部不可这么使用
声明多种类型的变量
0值
变量如果声明时,如果没有写明初始值,则会默认赋为0值:
基本类型
类型转换
const
解决unzip在linux下解压中文名zip文件出现乱码的问题
原文:https://www.cnblogs.com/JesseTsou/p/11254714.html