因为暑期实习找得很不顺利,感觉自身最大的问题体现在刷题量偏少,操作系统,数据库基础不好,所以现在决定写博客来记录整个过程,希望能找到大厂offer,如果不能找到的话也算是为秋招做准备。

剑指offer的题我很早就刷完了,现在主要刷leetcode的题。今天更新的是我刷的数组的题,基本的思路有:

排序

查找

指针碰撞

滑动窗口

因为整个博客更多的给自己看,所以内容上可能可读性不是很好~ 大致格式为

(# leetcode题号,leetcode题目

代码)

#数组问题, 排序,查找,指针对撞,滑动窗口
#75. 三路快排 颜色分类
class Solution:
    def sortColors(self, nums: List[int]) -> None:
        """
        Do not return anything, modify nums in-place instead.
        """
        zero = -1
        two = len(nums)
        index = 0
        while index < two:
            if nums[index] == 1:
                index += 1
            elif nums[index] == 0:
                zero += 1
                nums[index], nums[zero] = nums[zero], nums[index]
                index += 1
            elif nums[index] == 2:
                two -= 1
                nums[index], nums[two] = nums[two], nums[index]

#88. 合并两个有序数组
class Solution:
    def merge(self, nums1, m, nums2, n):
        """
        Do not return anything, modify nums1 in-place instead.
        """
        nums1_copy = nums1[:m]
        nums1 = []
        index1 = 0
        index2 = 0
        while index1 < m and index2 < n:
            if nums1_copy[index1] < nums2[index2]:
                nums1.append(nums1_copy[index1])
                index1 += 1
            else:
                nums1.append(nums2[index2])
                index2 += 1
        if index1 < m: 
            nums1[index1 + index2:] = nums1_copy[index1:]
        if index2 < n:
            nums1[index1 + index2:] = nums2[index2:]
        return nums1

#215. 利用快速排序,找到第k个最大元素
class Solution:
    def quick_sort(self, l, k,start, end):
        i = start
        j = end
        flag = l[start]
        while i < j:
            while flag <= l[j] and i < j:
                j -= 1
            l[i] = l[j]
            while flag >= l[i] and i < j:
                i += 1
            l[j] = l[i]
        l[i] = flag
        if i == len(l)-k:
            return l
        elif i < len(l)-k:
            self.quick_sort(l, k, i+1, end)
        else:
            self.quick_sort(l, k, start, i-1)
        return l
    def findKthLargest(self, nums, k):
        return self.quick_sort(nums, k, 0, len(nums)-1)

#167. 使数组之和为sum
class Solution:
    def twoSum(self, numbers: List[int], target: int) -> List[int]:
        start = 0
        end = len(numbers) -1
        while start <= end:
            if numbers[start] + numbers[end] == target:
                return [start,end]
            elif numbers[start] + numbers[end] < target:
                start += 1
            elif numbers[start] + numbers[end] > target:
                end -= 1
                
#125 验证回文串
import re
class Solution:
    def isPalindrome(self, s: str) -> bool:
        if len(s) == 0:
            return True
        l = ''.join(re.findall(r'[a-zA-Z0-9]+',s)).lower()
        start = 0
        end = len(l)-1
        while l[start] == l[end]:
            start += 1
            end -= 1
            if start > end:
                return True
        return False

#344 翻转字符串
class Solution:
    def reverseString(self, s: List[str]) -> None:
        """
        Do not return anything, modify s in-place instead.
        """
        start = 0
        end = len(s) - 1
        while start < end:
            s[start], s[end] = s[end], s[start]
            start += 1
            end -= 1

#345 翻转元音字母
class Solution:
    def reverseString(self, s):
        l = list(s)
        start = 0
        end = len(s) - 1
        l_yuanyin = ['a','e','i','o','u', 'A','E','I','O','U'] 
        while start < end:
            while l[start] not in l_yuanyin:
                start += 1
                if start >= len(l):
                    break
            while l[end] not in l_yuanyin and end > -1:
                end -= 1
                if end<=-1:
                    break
            if start < end:
                l[start], l[end] = l[end], l[start]
                start += 1
                end -= 1
            
        s = ''.join(l)
        return s
so = Solution()
print(so.reverseString(".,"))

#11
class Solution:
    def maxArea(self, height):
        left = 0
        right = len(height)-1
        result = (right - left) * min(height[right], height[left])
        while left < right:
            if height[right] > height[left]:
                left += 1
            else:
                right -= 1
            result = max(result, (right - left) * min(height[right], height[left]))
        return result

#3  最长没有重复字母的子串
class Solution:
    def lengthOfLongestSubstring(self, s: str) -> int:
        if len(s) == 0:
            return 0
        if len(s) == 1:
            return 1
        l = list(s)
        substr = [1]
        for i, v in enumerate(l):
            if i>0:
                tmp = []
                for j in range(i, -1, -1):
                    if l[j] not in tmp:
                        tmp.append(l[j])
                    else:
                        break
                substr.append(max(substr[i-1], len(tmp)))
        return substr[-1]

#438 找到字符串中所有字母异位词
from collections import Counter
class Solution:
    def findAnagrams(self, s, p):
        sCounter = Counter(s[0:len(p)-1])
        pCounter = Counter(p)
        l = []
        for i in range(len(p)-1, len(s)):
            sCounter[s[i]] += 1
            if sCounter == pCounter:
                l.append(i-len(p)+1)
            sCounter[s[i-len(p)+1]] -= 1
            if sCounter[s[i-len(p)+1]] == 0:
                del sCounter[s[i-len(p)+1]]
                
        return l

#76最小覆盖子串
from collections import Counter
from collections import defaultdict
class Solution:
    def issubstr(self, scounter, tcounter):
        for i in tcounter:
            if i in scounter and tcounter[i] <= scounter[i]:
                continue
            else:
                return False
        return True
    
    def minWindow(self, s: str, t: str) -> str:
        start = 0
        tCounter = Counter(t)
        res = ''
        scounter = defaultdict(int)
        for i in range(len(s)):
            if s[i] in tCounter:
                scounter[s[i]] += 1
            print(i, s[i], s[start:i+1])
            while start < len(s) and self.issubstr(scounter, tCounter):
                ##  这里需要重新写
                print(start, res, s[start:i+1])
                if res == '':
                    res = s[start:i+1]
                else:
                    if len(s[start:i+1]) < len(res):
                        res = s[start:i+1]
                    if s[start] in tCounter:
                        scounter[s[start]] -= 1
                    start += 1
            print(s[start:i+1], scounter)
        return res
                    
so = Solution()
print(so.minWindow("ADOBECODEBANC" , "ABC"))

leetcode刷题日记(一)—— 数组相关推荐

  1. 一个算法笨蛋的12月leetCode刷题日记

    类似文章 一个算法笨蛋的2021年11月leetCode刷题日记 一个算法笨蛋的2021年12月leetCode刷题日记 一个算法笨蛋的2022年1月leetCode刷题日记 一个算法笨蛋的2022年 ...

  2. Leetcode刷题日记:21-25题篇

    Leetcode刷题日记:21-25题篇 简介 题目: 21. 合并两个有序链表 22. 括号生成 23. 合并K个升序链表 24. 两两交换链表中的节点 25. K 个一组翻转链表 注 简介 这个系 ...

  3. LeetCode刷题笔记2——数组2

    LeetCode刷题笔记2--数组2 重塑数组 题目 在 MATLAB 中,有一个非常有用的函数 reshape ,它可以将一个 m x n 矩阵重塑为另一个大小不同(r x c)的新矩阵,但保留其原 ...

  4. Leetcode刷题日记(十二)

    又是老台词:欢迎大家来到一晚一度的leetcode刷题日记时间.今天我们来讲讲队列的问题,队列这方面的基础知识需要的同学到博主前面的文章找吧.队列这方面的问题平时博主也是接触得比较少的.下面是一道利用 ...

  5. 【LeetCode刷题日记】常用算法基础和理解及运用

    在我们LeetCode刷题过程中,如果我们只是了解数据结构(数组,链表,数)的使用方法,那我们在面对复杂的题目时,是很难很好的解决问题的,因此我们要了解一些常用算法来帮助我们更好的解题. 递归和迭代 ...

  6. LeetCode刷题(十)----数组-----medium部分(Java、C++)

    LeetCode刷题(十)-----数组-------medium部分(Java.C++) 238. 除自身以外数组的乘积 给定长度为n的整数数组nums,其中n>1,返回输出数组output, ...

  7. 为了更快的砍柴,每日磨刀:LeetCode刷题总结(数组篇)

    看完<资深技术Leader曹乐:如何成为技术大牛>这篇文章后,我把提升代码能力,放到了一个优先级比较高的位置.为什么是刷LeetCode而不是看开源代码?可能有几个方便的原因: 1 面试笔 ...

  8. C#LeetCode刷题-树状数组

    树状数组篇 # 题名 刷题 通过率 难度 218 天际线问题 32.7% 困难 307 区域和检索 - 数组可修改 42.3% 中等 315 计算右侧小于当前元素的个数 31.9% 困难 493 翻转 ...

  9. 【leetcode刷题】 64.数组的度——Java版

    ⭐欢迎订阅<leetcode>专栏,每日一题,每天进步⭐ 看明白了就不难,总结一下就是要找出数组的众数,并且还有找出众数在数组中第一次出现和最后一次出现的位置,两个位置组成区间长度就是答案 ...

最新文章

  1. 解读2018年诺贝尔化学奖成果:用进化的力量解决化学问题
  2. EmbeddedWebBrowser(EmbeddedWB)不显示图片
  3. python中da_python学习 da4
  4. 2018/8/9 MultiU 6 并查集+dfs,反向建边提高查询效率 !!! / 最大字段和n维(降维)/ 状压+中途相遇法...
  5. bootstrap table列宽设置无效解决
  6. Eclipse版本控制插件Subclipse与Subversive的区别与选择
  7. 网站metro风格正式发布
  8. 2021-2027全球与中国USB C型集线器市场现状及未来发展趋势
  9. C++/MFC修行之路(6)停靠窗口
  10. Python多线程编程之线程子类化
  11. 纸壳CMS 3.3.6发布升级.Net 5
  12. spyder pyecharts不显示_微星PAG272QRZ显示器好不好用 微星PAG272QRZ显示器全面评测_显示器_硬件教程...
  13. C++批量修改文件后缀名(提供多种方法)
  14. 拆解碧桂园2021投资版图,是主动“扩张”还是被动“焦虑”?
  15. 北京大学2017年数学分析考研试题
  16. 【Excel--高级筛选】学习总结
  17. java求某点坐标是否包含在菱形面积中
  18. docker+nginx+tomcat*3在华为云服务器上的负载均衡
  19. 四季靓汤—土茯苓乌龟汤
  20. ushort mysql_FreeSql 新的八大骚功能,.NETCore 你必须晓得的 ORM

热门文章

  1. FreeSWITCH背后的故事(译)
  2. 读我们的学科——计算机专业学习浅谈
  3. 2021年中国外汇交易情况分析:中国银行结汇金额为16.5万亿元,同比增长17%[图]
  4. 使用mysql_upgrade升级mysql5.1至5.6的数据库升级实施方案
  5. 今天,我们从知乎说起。
  6. 小晴天老师系列——竖式乘法(暴力)
  7. 数字化的一切都会在安全沙箱里面
  8. Android技术知识点:什么是外边距(margin)
  9. Tensorflow用SVM(高斯核函数)分类非线性数据
  10. 电机调速设计并用matlab仿真,终稿毕业论文设计_基于PWM控制的直流电动机调速系统设计及MATLAB仿真.doc最终版(备份存档)...