ARST
Algorithm: 每周一道Leetcode
Review: 每周阅读并点评至少一篇英文技术文章
Tip: 每周学习技术技巧
Share: 每周分享一篇有观点和思考的技术文章
A
Leetcode977——Squares of a Sorted Array
题目要求:
Given an array of integers A sorted in non-decreasing order, return an array of the squares of each number, also in sorted non-decreasing order.
Example 1:
Input: [-4,-1,0,3,10]
Output: [0,1,9,16,100]
Example 2:
Input: [-7,-3,2,3,11]
Output: [4,9,9,49,121]
Note:
1.1 <= A.length <= 10000
2.-10000 <= A[i] <= 10000
3.A
is sorted in non-decreasing order.
C++编写:
一开始想的笨拙方法:
class Solution {
public:
vector<int> sortedSquares(vector<int>& A) {
vector<int> B;
for(int i=0;i<A.size();i++)
{
B.push_back(pow(A[i],2));
}
int j,pos,bound,hold;
pos=A.size()-1;
while(pos)
{
bound=pos;
pos=0;
for(j=0;j<bound;j++)
{
if(B[j]>B[j+1])
{
hold=B[j];
B[j]=B[j+1];
B[j+1]=hold;
pos=j;
}
}
}
return B;
}
};
一开始我的想法就是把所有的平方值都放进一个数组里面,然后对数组进行排序,最后即可以得到所要的结果。本来上学就只提到了冒泡排序,这里也是用的冒泡排序编写的,但是感觉冒泡太耗时,因此也是去看了看各种排序算法,后面的Tip会提到。不过这个方法实在是太慢了,我们可以从运行效果看出来,因此也去看了一下别人的思路写出来。
代码较短且一目了然的代码:
class Solution {
public:
vector<int> sortedSquares(vector<int>& A) {
vector<int> B;
int left=0,right=A.size()-1;
while(left <= right)
{
if(abs(A[left]) >= abs(A[right]))
{
B.push_back(pow(A[left],2));
left++;
}
else
{
B.push_back(pow(A[right],2));
right--;
}
}
reverse(B.begin(), B.end());
return B;
}
};
这个运行速度就比前面快了接近10倍,由于运行速度其实是和地区、网络都有关的,运行的最好的一次效果如下
R
这种计算机视觉技术实际上可以看到角落
来自美国,加拿大和欧洲的一组计算机视觉研究人员开发了一种技术来观察角落。通过这篇文章的介绍,我们可以知道现在计算机视觉技术也是发展得非常迅速的,并且它能够实现的很多功能可能我们都还不知道,现在的科技发展得越来越迅速了,我们只要基础够扎实,能力够强,完全也可以去探索这些我们所了解领域里的未知世界。
T
其实在很早之前是写过有关排序算法的一个知识的,但是这次也是很惊喜地找到了一个关于排序算法的文章,写得非常详细,并且讲的很清晰,有图有过程很好理解
C++八大排序算法
同时这周的Leetcode可能会用到反转一个数组,我知道Python有这种函数sorted()来实现的,但对于C++还真的不太清楚,于是找了一下反转的方法,反转数组倒是只找到个reverse()函数,却是找到了字符串反转的方法
c++中字符串反转的3种方法
当然数组反转也可以自己编写一个函数进行实现,于是自己写了一个反转数组的函数,代码如下: