算法进修Day-2

算法进修Day - 2

3. 无重复字符的最长字串

难度:中等
题目要求:
给定一个字符串s,请你找出其中不含有重复字符的最长字串的长度

示例1

输入:s = “abcabcbb”
输出:3
解释:因为无重复字符的最长字串是“abc”,所以其长度为 3

示例2

输入:s = “bbbbb”
输出:1
解释:因为无重复字符的最长子串是“b“,所以其长度为 1

示例3

输入:s = “pwwkew”
输出:3
解释:因为无重复字符的最长子串是”wke",所以其长度为3
注意:答案必须是子串的长度,“pwke"是一个子序列,不是子串

题解

最开始的想法:将字符串s转换成char的字符组,然后对数组进行遍历,利用for循环来达到校验的目的
犯的错误:时间复杂度过高,导致编译不通过
修改过后的方法:定义哈希集合,记录每一个字符是否出现过,然后根据两个指针leftright的移动来对整个字符串来进行窗口移动

修改后的代码

public static int LengthOfLongestSubstring(string s)
    {
        HashSet<char> letter = new HashSet<char>();
        int left = 0, right = 0;
        int length = s.Length;
        int count = 0, max = 0;
        while (right < length)
        {
            if (!letter.Contains(s[right]))
            {
                letter.Add(s[right]);
                right++;
                count++;
            }
            else
            {
                letter.Remove(s[left]);
                left++;
                count--;
            }
            max = Math.Max(max, count);
        }
        return max;
    }

4. 寻找两个正序中位数的中位数

难度:困难
题目要求:
给定两个大小分别为mn的正序(从小到大)数组nums1nums2找出并返回这两个正序数组的中位数

示例1

输入:nums1 = [1,3],nums2 = [2]
输出:2.00000
解释:合并数据 = [1,2,3],中位数 2

示例2:

输入:nums1 = [1,2],nums2 = [3,4]
输出:2.50000
解释:合并数据 = [1,2,3,4],中位数 2.5

题解

最开始的想法为将两个数组合并到一个List表中,通过Sort来对它进行排序,并获得两个数组的长度的和len,如果和为奇数就可以直接返回List中的len / 2的值,如果为偶数,就返回Listlen / 2len / 2 + 1的和的平均值

想法代码

public static double FindMedianSortedArrays(int[] nums1, int[] nums2)
    {
        int m = nums1.Length;
        int n = nums2.Length;
        int len = m + n;
        var resultIndex = len / 2;
        List<int> list = new List<int>(nums1);
        list.AddRange(nums2);
        list.Sort();
        if (len % 2 == 0)
        {
            return (list[resultIndex - 1] + list[resultIndex]) / 2.0;
        }
        else
        {
            return list[resultIndex];
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值