leetcode刷题:打卡第3天

一、学习新题

1、合并两个有序数组

给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。

注意:最终,合并后数组不应由函数返回,而是存储在数组 nums1 中。为了应对这种情况,nums1 的初始长度为 m + n,其中前 m 个元素表示应合并的元素,后 n 个元素为 0 ,应忽略。nums2 的长度为 n 。

class Solution {
public:
    void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
        //为两个数组分别设置一个指针p1与p2来作为队列的头部指针
        int p1=0,p2=0;
        //排序好的数组的长度是原来两个数组的长度之和
        int sorted[m+n];
        //
        int cur;
        //在指针下标不超过数组长度的前提下
        while(p1<m||p2<n)
        {
            //如果指针1和数组nums1中的m下标相等
            //也就是说,数组1中的元素都小于数组2中的元素
            if(p1==m){
                //就把数组nums2中下标为指针2的位置后移,并将这个位置的值赋值给cur
                cur=nums2[p2++];
            }
            //如果指针2和数组nums2中的n下标相等
            //也就是说,数组2中的元素都大于数组1中的元素
            else if(p2==n){
                //就把数组nums1中下标为指针1的位置后移,并将这个位置的值赋值给cur
                cur=nums1[p1++];
            }
            //如果数组1下标为p1对应的数小于数组2下标为p2对应的数
            else if(nums1[p1]<nums2[p2]){
                //就把较小的数赋值给cur
                cur=nums1[p1++];
            }else{
                //最后,如果以上情况均不满足,就将数组2中下标为指针2的位置后移,并将这个位置的值赋给cur
                cur=nums2[p2++];
            }

            
            sorted[p1+p2-1]=cur;
        }

        for(int i=0;i!=m+n;i++){
            nums1[i]=sorted[i];
        }

    }
};

二、复习旧题

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

        给定一个已排序的链表的头节点 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){
            return head;
        }

        ListNode* temp=head;
        while(temp->next){
            if(temp->val==temp->next->val){
                temp->next=temp->next->next;
            }else
            {
                temp=temp->next;
            }
        }
        return head;
    }
};

2、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;
    }
};

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值