Leetcode刷题总结

昨天刷过的2道题的相关知识点在这里总结一下。

88. 合并两个有序数组

class Solution {
    public void merge(int[] nums1, int m, int[] nums2, int n) {
        //基本解法思路:设置指针 len1 和 len2 分别指向 nums1 和 nums2 的有数字尾部,从尾部值开始比较遍历,同时设置指针 len 指向 nums1 的最末尾,每次遍历比较值大小之后,则进行填充。
        int len1 = m-1;
        int len2 = n-1;
        int len = m+n-1;
        //条件:数组长度必须都大于或等于0
        while(len1>=0 && len2>=0){
            //比较nums1跟nums2的数组的数的大小,从尾部进行填充,并且利用判断语句对选中的部分进行进一步移动。  并且这是先赋值之后进行减位置操作,不会出现位置不对的情况
            nums1[len--]= nums1[len1]>nums2[len2]? nums1[len1--]: nums2[len2--];
        }
        
        //若len2的先遍历完则不需要这步骤,也是最好的结果。若len1先被遍历完了,则把剩下的len2中,(肯定是比它小的)的部分补到最前面
        System.arraycopy(nums2 , 0 , nums1 , 0 , len2+1);
        //表示的是:把nums2加到nums1中,把nums2中剩下的,取位置0长度为len2+1,补到nums1中索引为0的位置。

    }
}

        这是自己最后写的解法跟注解。其中涉及一个知识点,数组的复制System.arraycopy。单独总结一下,之前没有见过

System.arraycopy(nums2 , 2 , nums1 , 0 , 3);

这个表示把数组2中的数据拷贝到数组1中。具体是这样的:从数组2中索引位置2开始,选取长度为3的那部分(也就是从数组2的索引位置2到位置4),填到数组1中索引为0的位置。

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

这里引入了一个新东西链表。它的最终解法如下

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public ListNode deleteDuplicates(ListNode head) {
        //把head的地址赋值给cur,因为是链表,最后返回的还是按照之间的顺序,所以head不能动,用一个cur来当指针,cur改变则head链表也随之改变。若只用head操作,只会返回最后一个值。
        ListNode cur =head;

        //做一个循环,直到循环到底。 前提就是当前跟后一个节点都不为空
        while(cur !=null && cur.next !=null){
            if(cur.val == cur.next.val){
                cur.next = cur.next.next;
            //即使出现8 8最后这2个相同点的情况,也能借用后一个点的null把最后一个8替换掉
            }else{
                //若当前与后一个节点值不同,则cur指针后移一位
                cur=cur.next;
            }
        }
        //返回头结点
        return head;


    }
}

这里面涉及的新知识点:

1.链表的当前节点值表示为cur.val; 它的下一个位置写为 cur.next ; 下下一个位置为cur.next.next;

下一个位置的值表示为 cur.next.val;

2.整理出一个新链表的常规思路:把头指针head赋值到cur上,之后就让cur帮忙把这些事情解决,解决完了再返回head,返回head也是为了按照链表的正确顺序生成新链表。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值