1.刷题
682. 棒球比赛 (Tag为栈)
思路:按照题意一步一步写即可,没有什么骚操作。
需掌握下面的知识点:
一、int转String有三种方式
(1)num + ""
(2)String.valueOf(num) 常用
(3)Integer.toString(num)
二、String转int有两种方式
(1)Integer.parseInt(str) 常用
(2)Integer.valueOf(str).intValue()
350. 两个数组的交集 II(Tag为数组,哈希)
猜到了哈希,但好多函数没用过
思路:遍历长数组,用哈希表存储元素及其出现的次数,构建哈希表。然后遍历短数组,有重复元素,就将哈希表中出现次数减一,并将重复元素存储到新数组中,当出现次数为0,就将元素从哈希表中删除
涉及到的一些函数:
Arrays.copyOfRange(T[ ] original,int from,int to)
将一个原始的数组original,从小标from开始复制,复制到小标to,生成一个新的数组。注意这里包括下标from,不包括下标to。
V getOrDefault(Object key,V defaultValue)
源码:
default V getOrDefault(Object key, V defaultValue) {
V v;
return (((v = get(key)) != null) || containsKey(key)) ? v : defaultValue;
}
当Map集合中有key时,就使用key值对应的value,如果没有就使用默认值defaultValue
1029. 两地调度(Tag为贪心)
很有意思的一道题,感觉就像小学数学奥赛题一样,哈哈,我没做出来
思路:贪心+排序。用去A城的开销减去 去B城的开销,得一数组,数组中小于0 的元素表示,去A的开销小于去B的开销,反之去B的开销小于去A的开销,排序(升序)。假设全部去A,得去A的总开销,但需要有一半人去B,而要保证最小,故需要找去B开销小的那一部分,即数组中大于0的数,总开销减去排在后面N / 2 个元素,得到的开销即为最小开销
涉及的知识点:
(1)Array.sort(int[ ] nums ),默认是升序排序
(2)数组名加上length(arr.length),表示该数组的行数(Row);
(3)指定索引加上length(arr[x].length),表示该行的元素个数,即该行的列数(Column)。
459. 重复的子字符串(Tag为字符串)
完全不知道咋写,看了下大佬的思路,瞬间跪下,直接附上大佬思路
思路:如果字符串S包含一个重复的子字符串,那么这意味着可以多次“移位和换行”字符串,并使其与原始字符串匹配。
例如:abcabc
移位一次:cabcab
移位两次:bcabca
移位三次:abcabc
现在字符串和原字符串匹配了,所以可以得出结论存在重复的子串
基于这个思想,可以每次移动k个字符,直到匹配移动length - 1次。但是这样对于重复字符串很长的字符串,效率会非常低。在LeetCode中执行时间超时了。
为了避免这种无用的环绕,可以创建一个新的字符串str,它等于原来的字符串S再加上S自身,这样其实就包含了所有移动的字符串。
比如字符串:S = acd,那么str = S + S = acdacd
acd移动的可能:dac、cda。其实都包含在了str中了。就像一个滑动窗口
一开始acd (acd) ,移动一次ac(dac)d,移动两次a(cda)cd。循环结束
所以可以直接判断str中去除首尾元素之后,是否包含自身元素。如果包含。则表明存在重复子串。
作者:13217319563
链接:https://leetcode-cn.com/problems/repeated-substring-pattern/solution/jian-dan-ming-liao-guan-yu-javaliang-xing-dai-ma-s/
来源:力扣(LeetCode)
2.进程与线程(写个大纲)
(1)进程:一个进程就是一个正在执行的程序的实例。进程是资源分配的基本单位。每个进程占用一个进程控制块(PCB),PCB是进程存在的唯一标志。
(2)线程:线程是进程中的一条执行流程,是独立调度的基本单位。一个进程可以有多个线程,他们共享进程资源。
(3)进程与线程的区别
1.拥有资源方面:
进程是资源分配的基本单位,线程不拥有资源,但线程可以访问隶属进程的资源。
2.调度方面:
线程是独立调度的基本单位,在同一进程中,线程的切换不会引起进程的切换,而从一个进程中的线程切换到另一个进程中的线程,会引起进程的切换。
3.系统开销方面:
由于创建或撤销进程时,系统要为其分配或回收资源,所付出的开销远大于创建或撤销线程。进程切换时,涉及当前执行进程CPU环境的保存及新进程CPU环境的设置,而线程切换时只需保存和设置少量寄存器内容,开销小。
4.通信方面:
线程可直接读写同一进程中的数据进行通信,而进程通信需要借助IPC(进程间通信)
(4)IPC
1.概念:即进程间的信息交换
各个进程拥有的内存地址空间相互独立,为保证安全,一个进程不能直接访问另一个进程的地址空间。
2.通信方法
一.共享存储
二.管道通信
三.消息传递
四.信号量
五.Socket
(5)进程的七状态模型(掌握状态间的相互转化)
1.创建状态
2.就绪状态
3.就绪挂起状态
4.运行状态
5.阻塞状态
6.阻塞挂起状态
7.结束状态