算法题 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;   
    }
}

 

上一篇:Week3:选数问题——dfs遍历


下一篇:机器学习——Week3