leecode-38-外观数列
leecode-53. 最大子序和给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
示例:
123输入: [-2,1,-3,4,-1,2,1,-5,4]输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。
进阶:
如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精妙的分治法求解。
1234567891011121314151617181920#!/usr/bin/env python# -*- coding: utf-8 -*-# author:sarizzm time:2020/12/31 0031class Solution: def maxSubArray(self, nums): dp = 0 result = nums[0] for num in nums: dp = max(dp + num, num) result = max(dp, result) # if dp + num &g ...
java-多线程
[TOC]
多线程程序、进程、线程概念理解
程序(program)是为完成特定任务、用某种语言编写的一组指令的集合。即指一段静态的代码,静态对象。
进程(process)是程序的一次执行过程,或是正在运行的一个程序。是一个动态的过程:有它自身的产生、存在和消亡的过程。 ——生命周期
如:运行中的QQ,运行中的MP3播放器
程序是静态的,进程是动态的
进程作为资源分配的单位, 系统在运行时会为每个进程分配不同的内存区域
线程(thread),进程可进一步细化为线程,是一个程序内部的一条执行路径。
若一个进程同一时间并行执行多个线程,就是支持多线程的
线程作为调度和执行的单位,每个线程拥有独立的运行栈和程序计数器(pc),线程切换的开销小
一个进程中的多个线程共享相同的内存单元/内存地址空间它们从同一堆中分配对象,可以访问相同的变量和对象。这就使得线程间通信更简便、高效。但多个线程操作共享的系统资源可能就会带来安全的隐患。
单核CPU和多核CPU的理解
单核CPU,其实是一种假的多线程,因为在一个时间单元内,也只能执行一个线程的任务。例如:虽然有多车道, ...
java-5-面向对象
[TOC]
java面向对象关键字static:static 使用环境 创造由类可以直接使用的关键字:
123456789class Circle{ private double radius; public Circle(double radius){ this.radius=radius; } public double findArea(){ return Math.PI*radius*radius; }}
创建两个Circle对象
Circle c1=new Circle(2.0); //c1.radius=2.0Circle c2=new Circle(3.0); //c2.radius=3.0
Circle类中的变量radius是一个实例变量(instance variable), 它属于类的每一个对象, 不能被同一个类的不同对象所共享。
上例中c1的radius独立于c2的radius, 存储在不同的空间。 c1中的radius变化不会影响c2的radius, 反之亦然。
==如果想让一个类的所有实例共享数 ...
leecode-35-搜索插入位置
leecode-35. 搜索插入位置给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
你可以假设数组中无重复元素。
12345678910111213141516示例 1:输入: [1,3,5,6], 5输出: 2示例 2:输入: [1,3,5,6], 2输出: 1示例 3:输入: [1,3,5,6], 7输出: 4示例 4:输入: [1,3,5,6], 0输出: 0
1234567891011121314151617181920212223#!/usr/bin/env python# -*- coding: utf-8 -*-# author:sarizzm time:2020/12/29 0029class Solution: def searchInsert(self, nums, target): right = len(nums)-1 left = 0 while(left < right): temp_mid = (left+r ...
leecode-28-实现 strStr()
leecode-28-实现 strStr()实现 strStr() 函数。
给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回 -1。
12345678示例 1:输入: haystack = "hello", needle = "ll"输出: 2示例 2:输入: haystack = "aaaaa", needle = "bba"输出: -1
说明:
当 needle 是空字符串时,我们应当返回什么值呢?这是一个在面试中很好的问题。
对于本题而言,当 needle 是空字符串时我们应当返回 0 。这与C语言的 strstr() 以及 Java的 indexOf() 定义相符
解法一:1234567891011121314151617181920212223242526272829303132333435363738394041#!/usr/bin/env python# -*- coding: utf-8 -*-# author:sarizzm time:2020/ ...
leecode-27-移除元素
leecode-27. 移除元素给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。
不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。
元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。
12345678910111213141516示例 1:给定 nums = [3,2,2,3], val = 3,函数应该返回新的长度 2, 并且 nums 中的前两个元素均为 2。你不需要考虑数组中超出新长度后面的元素。示例 2:给定 nums = [0,1,2,2,3,0,4,2], val = 2,函数应该返回新的长度 5, 并且 nums 中的前五个元素为 0, 1, 3, 0, 4。注意这五个元素可为任意顺序。你不需要考虑数组中超出新长度后面的元素。
说明:
为什么返回数值是整数,但输出的答案是数组呢?
请注意,输入数组是以「引用」方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。
你可以想象内部操作如下:
12345678// nums 是以“引用”方式传递的。也就是说,不对 ...
java-4-面向对象
[TOC]
java-面向对象继承性(inheritance)
为什么要有继承?
多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承那个类即可。
此处的多个类称为子类(派生类), 单独的这个类称为父类(基类或超类)。 可以理解为:“子类 is a 父类”
类继承语法规则: class Subclass extends SuperClass{ }
作用:
继承的出现减少了代码冗余,提高了代码的复用性。
继承的出现,更有利于功能的扩展。
继承的出现让类与类之间产生了关系,提供了多态的前提。
==注意:不要仅为了获取其他类中某个功能而去继承==
子类继承了父类,就继承了父类的方法和属性。
在子类中,可以使用父类中定义的方法和属性,也可以创建新的数据和方法。
在Java 中,继承的关键字用的是“extends”,即子类不是父类的子集,而是对父类的“扩展” 。
关于继承的规则:子类不能直接访问父类中私有的(private)的成员变量和方法。
Java只支持单继承和多层继承, 不允许多重继承**
一个子类只能有一个父 ...
leecode-20-有效的括号
leecode-20. 有效的括号
给定一个只包括 ‘(‘,’)’,’{‘,’}’,’[‘,’]’ 的字符串,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
12345678910111213141516171819示例 1:输入: "()"输出: true示例 2:输入: "()[]{}"输出: true示例 3:输入: "(]"输出: false示例 4:输入: "([)]"输出: false示例 5:输入: "{[]}"输出: true
解法一:123456789class Solution: def isValid(self, s): stack = [] for st in s: if stack and stack[-1]+st in ["()","{}","[]"]: stack.pop() continue stack.appen ...