今日LC

来源:互联网 发布:威客圈淘宝单 编辑:程序博客网 时间:2024/04/29 20:25

83. Remove Duplicates from Sorted List


ListNode* deleteDuplicates(ListNode* head) {
        if(head == NULL ||head->next == NULL)
            return head;
         
       // if(head.length() == 1)
            //return head;
        ListNode* tmp = head;    
        //head = head->next;
        while(tmp->next){
             
            if(tmp->val == tmp->next->val){
                tmp->next = tmp->next->next;
                 
            }
            else  
                tmp = tmp->next;
                 
        }
        return head;
    }


体会:没怎么做过链表的题,需要新建一个指针,用于操作链表,删除内容,头指针不变,代表整个链表;


88. Merge Sorted Array


    void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
        //if(nums1.size()==NULL)
             
         
        int tmp,a1,a2;
        a1 = m-1;
        a2 = n-1;
        tmp = m+n-1;
        while(a1>=0&&a2>=0){
            if(nums1[a1]>nums2[a2]){
                nums1[tmp] = nums1[a1];
                tmp--;
                a1--;
            }
            else{
                nums1[tmp] = nums2[a2];
                tmp--;
                a2--;
            }
             
        }
        while(a2>=0){
            nums1[tmp] = nums2[a2];
            tmp--;
            a2--;
        }
         
         
    }

体会:从尾部向前扫,逐个比较,不要绕圈子;


100. Same Tree


    bool isSameTree(TreeNode* p, TreeNode* q) {
        if(p == NULL&& q == NULL)
            return true;
        if(p == NULL|| q == NULL)
            return false;
        //TreeNode *tmp1 = p;
        //TreeNode *tmp2 = q;
        if(p->val != q->val)
            return false;
        return isSameTree(p->left,q->left)&&isSameTree(p->right,q->right);
    }

体会:树的问题第一次做,一般都用递归,记住!


141. Linked List Cycle


 bool hasCycle(ListNode *head) {
         
        if(head == NULL||head->next == NULL)
            return false;
        ListNode *p = head;//SLOW
        ListNode *q = head;//QUICK
         
        while(p!=NULL&&q!=NULL&&q->next!=NULL){
             
            p = p->next;
            q = q->next->next;
            if(p == q)//MEET
                return true;
        }
        return false;
    }


体会:算法不会,设计一个快指针一个慢指针,指针相遇,即有cycle;


136. Single Number


int singleNumber(vector<int>& nums) {
        int l = nums.size();
        if(l == 0)
            return 0;
        //if(l == 1)
            //return nums[0];
        int num = nums[0];
        for(int i = 1; i < l; i++){
            num = num^nums[i];
        }
        return num;
    }

体会:算法还是不会,要求时间复杂度是O(N);学会:相同数字取异得0;

这个题多研究了一下,觉得好有趣,手动异或了一个数组,发现每一步都可以检测出之前扫描过的落单的数字;

这个是可以累计的~



原创粉丝点击