leetcode刷题心得-2

237.删除链表中的结点
正常的方法是可以用head->next->val去判断下一个是否是删除的节点,然后head->next=head->next->next
但是题目已经给了node 结点,所以我们只需要直接把 node下一节点复制到node,把下一节点跳过。
处理这题的关键在于要对题目的条件的判断,不要一味的照搬书本。
代码如下:
class Solution {
public:
void deleteNode(ListNode* node) {
node->val = node->next->val;
node->next = node->next->next;
}
};
这个代码有个缺点就是 删除掉的Node没有被处理掉,成为了孤儿结点。
977. 有序数组的平方
一开始我的想法是先平方,然后排序输出,但是因为速度太慢无法通过,所以通过查找别人的方法发现可以通过双指针的办法来解决这个问题。
但是我又找了另外一种解决办法,首先是创建一个新的数组B,n变量是用作判断A数组中进行到哪个数字的,k变量是用作判断B数组中进行到哪个数字的,然后代码流程是遍历A数组,如果遇到小于0的情况,判断所有绝对值比第num-n-1小的数,然后B数组的尾部就是正数最大的依次排序,否则就将绝对值大的数放图B数组中。当碰见大于0的数的时候,直接填满后面的数就完成任务了,最后返回B。
代码如下:
class Solution {
public:
vector sortedSquares(vector& A) {
int n=0;
int k=0;
int const num = A.size();
vector B(num, 0);
for(int i=0;i {
if(A[i]<0)
{
while((-A[i]) {
B[num-k-1]=A[num-n-1]*A[num-n-1];
n++;
k++;
}
B[num-k-1]=A[i]*A[i];
k++;
}
else
{
for(int j=0;j {
B[j]=A[i+j]*A[i+j];
}
break;
}
}
return B;
}
};

你可能感兴趣的:(算法学习,题目解析)