ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

算法题 week3

2019-09-29 22:01:37  阅读:363  来源: 互联网

标签:ListNode val nums int 链表 算法 数组 week3


21 #合并两个有序链表

将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 

示例:

输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4

思路:设置一个新的链表,不断从l1和l2上找到较小的元素接在后面,生成新的有序链表。

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
        ListNode dummyHead = new ListNode(0);
        ListNode cur = dummyHead;
        while(l1 != null && l2 != null){
            if(l1.val<l2.val){
                cur.next = l1;
                cur = cur.next;
                l1 = l1.next;
            }
            else{
                cur.next = l2;
                cur = cur.next;
                l2 = l2.next;
            }
        }
        if(l1 == null){
            cur. next = l2;
        }
        else
            cur.next = l1;
        return dummyHead.next;
    }
    
}

26# 删除排序数组中的重复项

给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。

不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。

思路:快慢双指针,一个指向已经找到的不重复的数字的末尾,一个指向原数组,找到不同的放在慢指针处,找到相同的则快指针继续向后移动。

class Solution {
    public int removeDuplicates(int[] nums) {
        if (nums==null||nums.length==1){
            return nums.length;
        }
        else{
            int i = 0,j = 1;
            while(j<nums.length){
                if(nums[i]==nums[j]){
                    j++;
                }
                else{
                    i++;
                    nums[i] = nums[j];
                    j++;
                }
            }
            return i+1;
        }
    }
}

27#  移除元素

给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度。

不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。

元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。

思路:快慢指针

class Solution {
    public int removeElement(int[] nums, int val) {
        if(nums == null||(nums.length==1&&nums[0]!=val))
            return nums.length;
        int j = 0;
        for(int i =0;i<nums.length;i++){
            if(nums[i]!=val){
                nums[j]=nums[i];
                j++;
            }
        }
        return j;   
    }
}

 

标签:ListNode,val,nums,int,链表,算法,数组,week3
来源: https://www.cnblogs.com/XinL-blog/p/11610222.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有