leetcode刷题:打卡第2天

一、学习新题

1、爬楼梯

        假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?(1<=n<=45)

class Solution {
public:
    int climbStairs(int n) {
        int p=0,q=0,r=1;
        for(int i=1;i<=n;i++){
            p=q;
            q=r;
            r=p+q;
        }
        return r;
    }
};

       看了动态规划的视频讲解,知道和斐波那契数列大差不差,但还是不太懂。

2、删除链表中的重复元素

        给定一个已排序的链表的头节点 head , 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    ListNode* deleteDuplicates(ListNode* head) {
        //判断头节点(当前链表)是否为空
        if(head==nullptr){
            cout<<"当前链表为空,无法删除"<<endl;
            return head;
        }

        //重开一个指针cur来代替head
        //因为head是链表的起始地址,链表头要固定,如果不新开一个,最后将无法找到链表的起始地址并返回
        ListNode* cur=head;

        while(cur->next){
            //判断是否到链表最后
            if(cur->next==nullptr){
                break;
            }
            
            if(cur->next->val==cur->val){
                cur->next=cur->next->next;
            }else{
            //如果没有找到重复的,就将cur后移
            cur=cur->next;
            }
        }

            return head;
    }
    
};

        看到这道题有了一点点的思路,联想到了昨天刚复习的删除有序数组中的重复项这道题以及之前看的尚硅谷老师java数据结构与算法中对单链表的增删改查那一部分内容。然后我就参考这两部分内容写,但是还是写不出来,于是就又开始看着题解写了。

二、复习旧题

1、x的平方根

        给你一个非负整数 x ,计算并返回 x 的 算术平方根 。由于返回类型是整数,结果只保留 整数部分 ,小数部分将被 舍去 。注意:不允许使用任何内置指数函数和算符,例如 pow(x, 0.5) 或者 x ** 0.5 。

class Solution {
public:
    int mySqrt(int x) {
        int left=0,right=x,ans=0;
        while(left<=right){
            int mid=left+(right-left)/2;
            if((long long)mid*mid<=x){
                ans=mid;
                left=mid+1;
            }else{
                right=mid-1;
            }
        }
        return ans;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值