LeetCode 经典面试题

1、问题一、给出两个整数数组nums1和nums2,按非降序排序,以及两个整 数m和n,分别表示nums1和nums2中的元素。 将nums1和nums2合并为一个数组,按非降序排.

最终排序的数组不应由函数返回,而是存储在数组nums1中。为了适应这种情况,nums1的长度为m+n,其中前m个元素表示应该合并的元素,最后n个元素设置为0,应该忽略。nums2的长度为n。

Input:
nums1 = [1,2,3,0,0,0], m = 3
nums2 = [2,5,6], n = 3
Output: [1,2,2,3,5,6]

Constraints:
-10^9 <= nums1[i], nums2[i] <= 10^9
nums1.length == m + n
nums2.length == n

 1  int[] mergeSortedArrays(int[] nums1,int m, int[]nums2,int n)
 2 {
 3     int k = 0;
 4     for (int i = m; i < m+n; i++)
 5     {
 6         nums1[i] = nums2[k++];
 7     }
 8     Array.Sort(nums1);
 9     return nums1;
10 }
11 
12 int[] nums1 = { 1, 2, 3, 0, 0, 0 };
13 int[] nums2 = {  2, 5, 6 };
14 
15 foreach (var item in mergeSortedArrays(nums1, 3, nums2, 3))
16 {
17     Console.WriteLine(item);
18 }
19 
20 Console.ReadLine();

2、给定已排序链表的标题,删除所有重复项,使每个元素只出现一次,返回已排序的链表

 

 

 

 2.1因为链表原本就是有顺序的,所以只有相邻的两节点的值可能相等,所以只需比较相邻结点。如果相邻结点值相等,则当前结点指向下一结点的下一结点,即删除相同值的结点

 1 Node removeRepeatNode(Node root)
 2 {
 3     if (root==null)
 4     {
 5         return root;
 6     }
 7     var currentNode = root;
 8     while (currentNode.next!=null)
 9     {
10         if (currentNode.next.value==currentNode.value)
11         {
12             currentNode.next = currentNode.next.next;
13         }
14         else
15         {
16             currentNode = currentNode.next;
17         }
18     }
19 
20     return root;
21 }

1 public class Node
2 {
3     public int value { get; set; }
4     public Node next { get; set; }
5 }

2.2递归:时间复杂度与上一致,但空间复杂度较大。

public ListNode deleteDuplicates(ListNode head) {
        if(head ==null || head.next == null) return head;
        head.next = deleteDuplicates(head.next);
        return head.val == head.next.val ? head.next : head;
    }

 

 3、给定字符串,回文返回true ,否则返回false

/// <summary>
    /// Determines whether the string is a palindrome.
    /// </summary>
    public static bool IsPalindrome(string value)
    {
        int min = 0;
        int max = value.Length - 1;
        while (true)
        {
            if (min > max)
            {
                return true;
            }
            char a = value[min];
            char b = value[max];
            if (char.ToLower(a) != char.ToLower(b))
            {
                return false;
            }
            min++;
            max--;
        }
    }
static void Main()
    {
        string[] array =
        {
            "civic",
            "deified",
            "deleveled",
            "devoved",
            "dewed",
            "Hannah",
            "kayak",
            "level",
            "madam",
            "racecar",
            "radar",
            "redder",
            "refer",
            "repaper",
            "reviver",
            "rotator",
            "rotor",
            "sagas",
            "solos",
            "sexes",
            "stats",
            "tenet",
            
            "Dot",
            "Net",
            "Perls",
            "Is",
            "Not",
            "A",
            "Palindrome",
            ""
        };
        
        foreach (string value in array)
        {
            Console.WriteLine("{0} = {1}", value, IsPalindrome(value));
        }
    }

 

/// <summary>
/// 另一种解法
    /// Determines whether the string is a palindrome.
    /// </summary>
    public static bool IsPalindrome(string value)
    {
        int min = 0;
        int max = value.Length - 1;
        while (true)
        {
            if (min > max)
            {
                return true;
            }
            char a = value[min];
            char b = value[max];
            
            // Scan forward for a while invalid.
            while (!char.IsLetterOrDigit(a))
            {
                min++;
                if (min > max)
                {
                    return true;
                }
                a = value[min];
            }
            
            // Scan backward for b while invalid.
            while (!char.IsLetterOrDigit(b))
            {
                max--;
                if (min > max)
                {
                    return true;
                }
                b = value[max];
            }
            
            if (char.ToLower(a) != char.ToLower(b))
            {
                return false;
            }
            min++;
            max--;
        }
    }

 第三题:原文地址:https://www.dotnetperls.com/palindrome

posted @ 2022-07-30 11:28  烈火寒冰  阅读(659)  评论(0编辑  收藏  举报