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<num;i++)
{
if(A[i]<0)
{
while((-A[i])<A[num-n-1])
{
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<num-k;j++)
{
B[j]=A[i+j]*A[i+j];
}
break;
}
}
return B;
}
};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值