六六六六六六

83. 删除排序链表中的重复元素

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

 示例 1:

 

输入:head = [1,1,2]输出:[1,2]

 

c的思路做了半天发现怎么写都不对,都是没有这个目标,最后受不了了去看了评论,原来是有专门函数的。我真的会谢,我听的课里为什么没有讲这种嘞!一直讲的都是思路。我还以为java里面链表没有特殊的函数,枯了

代码如下:

class Solution {

    public ListNode deleteDuplicates(ListNode head) {

        if(head==null||head.next==null) return head;

        if(head.val==head.next.val){

            head= deleteDuplicates(head.next);

        }else {

            head.next = deleteDuplicates(head.next);

        }

            

        return head;

    }

    

}

 

 

88. 合并两个有序数组

给你两个按 非递减顺序 排列的整数数组 nums1 nums2,另有两个整数 m n ,分别表示 nums1 nums2 中的元素数目。

 

请你 合并 nums2 nums1 中,使合并后的数组同样按 非递减顺序 排列。

 

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

 

 

 

来源:力扣(LeetCode

链接:https://leetcode-cn.com/problems/merge-sorted-array

要求原地改造,所以小偷一波鸡,不过挺麻烦的,先把nums1中要排序的部分赋值给另一个数组,然后将两个数组在循环时比较直接放入nums1覆盖掉原先值即可。

代码如下:

class Solution {

    public void merge(int[] nums1, int m, int[] nums2, int n) {

        if(m==0&&n!=0){

            for(int i=0;i<n;i++){

                nums1[i]=nums2[i];

            }

        } 

        if(n!=0&&m!=0){

            int[] n1=new int[m];

            int flag1=0;

            int flag2=0;

            for(int i=0;i<m;i++){

                n1[i]=nums1[i];

            }

            for(int i=0;i<m+n;i++){

                if(flag1==m){

                    nums1[i]=nums2[flag2];

                    flag2++;

                    continue;

                }

                if(flag2==n){

                    nums1[i]=n1[flag1];

                    flag1++;

                    continue;

                }

                if(n1[flag1]<=nums2[flag2]){

                    nums1[i]=n1[flag1];

                    flag1++;

                }else{

                    nums1[i]=nums2[flag2];

                    flag2++;

                }

            }

        }

    }

}

看了评论区,发现一种非常简单的思路,就是把大的往后填充即可,代码如下:

public void merge(int[] nums1, int m, int[] nums2, int n) {

        if(n == 0) return;

        int i = n-- + m-- -1;

        while(n > -1){

            nums1[i--] = m < 0 || nums2[n] > nums1[m] ? nums2[n--] : nums1[m--];

        }

    }

看了一眼后续的简单题全部都是关于树的了,但是说实话只有个概念,特别是在java里,完全不知道怎么操作,所以在b站上找了学习视频看,怕听不懂就从头开始看了,老师讲的还是很不错的。听着很有兴趣。不过以后是不是要开始刷中等的题了,看了几眼感觉好难啊。

posted @ 2022-03-20 00:58  水煮小白菜  阅读(123)  评论(0编辑  收藏  举报