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

    py3代码

    # Definition for singly-linked list.
    # class ListNode:
    #     def __init__(self, x):
    #         self.val = x
    #         self.next = None
    
    class Solution:
        def mergeTwoLists(self, l1: ListNode, l2: ListNode) -> ListNode:
            res = ListNode(None)
            node = res;
            while l1 and l2:
                if l1.val<l2.val:
                    node.next,l1 = l1,l1.next
                else:
                    node.next,l2 = l2,l2.next
                node = node.next
            if l1:
                node.next = l1
            else:
                node.next = l2
            return res.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;
            }
        }
    }

    py3代码

    class Solution:
        def removeDuplicates(self, nums: List[int]) -> int:
            flag = 0
            for num in nums:
                if nums[flag]!=num:
                    flag+=1
                    nums[flag]=num
            return len(nums) and flag+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;   
        }
    }

     py3代码

    class Solution:
        def removeElement(self, nums: List[int], val: int) -> int:
            flag = 0
            for num in nums:
                if num != val:
                    nums[flag]=num
                    flag+=1
            return flag
  • 相关阅读:
    spring学习记录_Spring中的新注解
    spring学习记录_spring的 注解
    spring学习记录_spring的 ioc核心容器
    关于myeclipse项目运行报错:Access denied for user 'root'@'localhost' (using password: YES)
    vue项目中实现多语言切换
    OC中限制UITextView的最大字数的实现
    简单瀑布流的实现
    仿购物车的实现
    仿QQ好友列表界面的实现
    类似QQ侧滑菜单功能实现
  • 原文地址:https://www.cnblogs.com/XinL-blog/p/11610222.html
Copyright © 2020-2023  润新知