部分排序
部分排序
给定一个整数数组,编写一个函数,找出索引 m 和 n,只要将索引区间[m,n]的元素排好序,整个数组就是有序的。注意:n-m 尽量最小,也就是说,找出符合条件的最短序列。函数返回值为[m,n],若不存在这样的 m 和 n(例如整个数组是有序的),请返回[-1,-1]。
输入: [1,2,4,7,10,11,7,12,6,7,16,18,19]
输出: [3,9]
1234567891011121314151617181920var subSort = function(array) { let numLeft=-1 //初始化 let numRight=-1 //初始化 let max=Number.MIN_SAFE_INTEGER let min=Number.MAX_SAFE_INTEGER for(let i=0;i<array.length;i++){ if(array[i]>=max){ max=array[i] }else ...
成为 K 特殊字符串需要删除的最少字符数
成为 K 特殊字符串需要删除的最少字符数
给你一个字符串 word 和一个整数 k。如果 |freq(word[i]) - freq(word[j])| <= k 对于字符串中所有下标 i 和 j 都成立,则认为 word 是 k 特殊字符串。此处,freq(x) 表示字符 x 在 word 中的出现频率,而 |y| 表示 y 的绝对值。返回使 word 成为 k 特殊字符串 需要删除的字符的最小数量。
输入:word = “aabcaba”, k = 0输出:3解释:可以删除 2 个 “a” 和 1 个 “c” 使 word 成为 0 特殊字符串。word 变为 “baba”,此时 freq(‘a’) == freq(‘b’) == 2。
输入:word = “dabdcbdcdcd”, k = 2输出:2解释:可以删除 1 个 “a” 和 1 个 “d” 使 word 成为 2 特殊字符串。word 变为 “bdcbdcdcd”,此时 freq(‘b’) == 2,freq(‘c’) == 3,freq(‘d’) == 4。
12345678910111213141 ...
查找和替换模式
查找和替换模式
你有一个单词列表 words 和一个模式 pattern,你想知道 words 中的哪些单词与模式匹配。如果存在字母的排列 p ,使得将模式中的每个字母 x 替换为 p(x) 之后,我们就得到了所需的单词,那么单词与模式是匹配的。(回想一下,字母的排列是从字母到字母的双射:每个字母映射到另一个字母,没有两个字母映射到同一个字母。)返回 words 中与给定模式匹配的单词列表。你可以按任何顺序返回答案。
输入:words = [“abc”,”deq”,”mee”,”aqq”,”dkd”,”ccc”], pattern = “abb”
输出:[“mee”,”aqq”]
解释:“mee” 与模式匹配,因为存在排列 {a -> m, b -> e, …}。“ccc” 与模式不匹配,因为 {a -> c, b -> c, …} 不是排列。因为 a 和 b 映射到同一个字母。-
12345678910111213141516171819202122232425262728293031323334353637var findAndReplacePatte ...
不同的平均值数目
不同的平均值数目
给你一个下标从 0 开始长度为 偶数 的整数数组 nums 。只要 nums 不是 空数组,你就重复执行以下步骤:找到 nums 中的最小值,并删除它。找到 nums 中的最大值,并删除它。计算删除两数的平均值。两数 a 和 b 的 平均值 为 (a + b) / 2 。比方说,2 和 3 的平均值是 (2 + 3) / 2 = 2.5 。返回上述过程能得到的 不同 平均值的数目。
注意 ,如果最小值或者最大值有重复元素,可以删除任意一个。
输入:nums = [4,1,4,0,3,5]
输出:2解释:
删除 0 和 5 ,平均值是 (0 + 5) / 2 = 2.5 ,现在 nums = [4,1,4,3] 。
删除 1 和 4 ,平均值是 (1 + 4) / 2 = 2.5 ,现在 nums = [4,3] 。
删除 3 和 4 ,平均值是 (3 + 4) / 2 = 3.5 。2.5 ,2.5 和 3.5 之中总共有 2 个不同的数,我们返回 2 。
12345678var distinctAverages = function(nums) { ...
React.Suspense是什么
Suspense 是用来做什么的?suspense 的字面意思就是悬而不决,用在平时开发中,就可以理解为还没有完成的事,你不知道啥时候完成。也就是异步,异步加载组件,异步请求数据。
1. 代码拆分服务于打包优化的代码拆分。lazy和suspense配合使用
1234567const A = React.lazy(() => import('./A'))return ( <Suspense fallback={<p>loading</p>}> <Route component={A} path="/a"> </Suspense>)
这样在打包代码时,可以显著减少主包的体积,加快加载速度,从而提升用户体验;而当路由切换时,加载新的组件代码,代码加载是异步的过程,此时 suspense 就会进如 fallback,那我们看到的就是 loading,显式的告诉用户正在加载,当代码加载完成就会展示 A 组件的内容,整个 loading 状态 ...
合并两个有序数组
合并两个有序数组
给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。注意:最终,合并后数组不应由函数返回,而是存储在数组 nums1 中。为了应对这种情况,nums1 的初始长度为 m + n,其中前 m 个元素表示应合并的元素,后 n 个元素为 0 ,应忽略。nums2 的长度为 n 。
输入:nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3输出:[1,2,2,3,5,6]解释:需要合并 [1,2,3] 和 [2,5,6] 。合并结果是 [1,2,2,3,5,6] ,其中斜体加粗标注的为 nums1 中的元素。
输入:nums1 = [1], m = 1, nums2 = [], n = 0输出:[1]解释:需要合并 [1] 和 [] 。合并结果是 [1] 。
1234567891011121314var merge = function( ...
对操作系统的理解?核心概念有哪些?
对操作系统的理解?核心概念有哪些?一、是什么
操作系统(Operating System,缩写:OS)是一组主管并控制计算机操作、运用和运行硬件、软件资源和提供公共服务来组织用户交互的相互关联的系统软件程序,同时也是计算机系统的内核与基石简单来讲,操作系统就是一种复杂的软件,相当于软件管家操作系统需要处理如管理与配置内存、决定系统资源供需的优先次序、控制输入与输出设备、操作网络与管理文件系统等基本事务,操作系统的类型非常多样,不同机器安装的操作系统可从简单到复杂,可从移动电话的嵌入式系统到超级电脑的大型操作系统,在计算机与用户之间起接口的作用,如图
二、核心概念
操作系统的核心概念都是对具体物理硬件的抽象,主要有如下:
进程(线程):进程(线程)是操作系统对 CPU 的抽象
虚拟内存(地址空间):虚拟内存是操作系统对物理内存的抽象
文件:文件是操作系统对物理磁盘的抽象
shell:它是一个程序,可从键盘获取命令并将其提供给操作系统以执行。
GUI :是一种用户界面,允许用户通过图形图标和音频指示符与电子设备进行交互
计算机架构(computer architecture) ...
统计字符串中的元音子字符串
统计字符串中的元音子字符串
子字符串 是字符串中的一个连续(非空)的字符序列。元音子字符串 是 仅 由元音(’a’、’e’、’i’、’o’ 和 ‘u’)组成的一个子字符串,且必须包含 全部五种 元音。给你一个字符串 word ,统计并返回 word 中 元音子字符串的数目 。
输入:word = “aeiouu”输出:2解释:下面列出 word 中的元音子字符串(斜体加粗部分): -aeiouu
aeiouu
输入:word = “unicornarihan”输出:0解释:word 中不含 5 种元音,所以也不会存在元音子字符串。
1234567891011121314151617181920212223242526272829303132333435var countVowelSubstrings = function(word) { let str = 'aeiou'; let tmp = ''; let deo = []; for (let i = 0, n = word.length; i < n; i ...
数组中第 K 个独一无二的字符串
数组中第 K 个独一无二的字符串
独一无二的字符串 指的是在一个数组中只出现过 一次 的字符串。给你一个字符串数组 arr 和一个整数 k ,请你返回 arr 中第 k 个 独一无二的字符串 。如果 少于 k 个独一无二的字符串,那么返回 空字符串 “” 。注意,按照字符串在原数组中的 顺序 找到第 k 个独一无二字符串。
输入:arr = [“d”,”b”,”c”,”b”,”c”,”a”], k = 2输出:”a”解释:arr 中独一无二字符串包括 “d” 和 “a” 。“d” 首先出现,所以它是第 1 个独一无二字符串。“a” 第二个出现,所以它是 2 个独一无二字符串。由于 k == 2 ,返回 “a” 。
输入:arr = [“aaa”,”aa”,”a”], k = 1输出:”aaa”解释:arr 中所有字符串都是独一无二的,所以返回第 1 个字符串 “aaa” 。
123456789101112131415var kthDistinct = function(arr, k) { // 创建Map const map = new Map(); ...
最大间距
最大间距
给定一个无序的数组 nums,返回 数组在排序之后,相邻元素之间最大的差值 。如果数组元素个数小于 2,则返回 0 。您必须编写一个在「线性时间」内运行并使用「线性额外空间」的算法。
输入: nums = [3,6,9,1]输出: 3解释: 排序后的数组是 [1,3,6,9], 其中相邻元素 (3,6) 和 (6,9) 之间都存在最大差值 3。
输入: nums = [10]输出: 0解释: 数组元素个数小于 2,因此返回 0。
12345var maximumGap = function(nums, maxNum = 0) { if(nums.length < 2) return 0 nums.sort((a, b) => a - b).reduce((pre, val) => ((val - pre) > maxNum && (maxNum = (val - pre)),val)) return maxNum};