比如说: Lisp的括号只是表面现象; Lisp的代码和数据的表达方式没有差别, 而且比XML语法高明许多, 所以有无穷的好处; Lisp有强大无比的元语言能力, 程序员可以写出自我维护的代码; Lisp...我内心体会到一种神圣的情感, 一瞬间的顿悟, 几乎使我对电脑科学的观念发生了根本的改变。 顿悟的那一刻, 我成了Lisp的崇拜者。...你好, Lisp 到此刻为止, 我们所知的关于Lisp的指示可以总结为一句话: Lisp是一个可执行的语法更优美的XML, 但我们还没有说Lisp是怎样做到这一点的, 现在开始补上这个话题。...这两种方法的差别在于, Lisp使我们达到了一个更高层次的抽象, 我们不再受语言解析器本身的限制, 比较一下用Java库直接写的构造脚本和用Ant写的构造脚本其间的差别。...好在现在事情正在发生变化, Lisp的资源正在迅速增加, 随着时间推移, Lisp将会越来越受关注。Lisp使人超越平庸, 走到前沿。
racket是一个lisp [1] 家族的语言,祖上是common lisp [2] 对立的阵营scheme [3],起初为教学的目的而创立。...像lisp这样能够编写macro的语言,如果无法调试macro,简直就是一场灾难,当时玩clojure进行不下去也是稍微复杂一点的macro总写不对有关(我的功力实在有限),但DrRacket的 "Macro...racket的其它优点,都或多或少跟lisp有关,这个我觉得自己不必多讲。...如果你看过「黑客与画家」,就知道Paul Graham近乎偏执地把一切溢美之词都给了lisp,说它是最有表现力的语言,说lisp是自己公司成功的"secret weapon"。...对于lisp的优点,比如说一切皆为表达式,一切表达式皆可计算为一个值或一个list,语言可以在任何时候(读取,编译,执行)可用等等,可以看阮一峰的博文「为什么Lisp语言如此先进」[5],这里就不赘述。
使数组唯一的最小增量 题目描述 给定整数数组 A,每次 move 操作将会选择任意 A[i],并将其递增 1。 返回使 A 中的每个值都是唯一的最少操作次数。...可以看出 5 次或 5 次以下的 move 操作是不能让数组的每个值唯一的。...这种时间复杂度大,可以为 O(n^2) 第二种:排序 先排序 遍历数组 用一个队列来保存当前重复需要递增的一些值 找到前一个值和当前值差值大于1的,说明可以将之前重复的值递增到 [A[i - 1] +...遍历完成后,队列不为空,则可以将剩下的值依次递增为 [A[n−1]+1,∞)中的数字, A[n−1]代表数组的最后一个值。 解题方法 直接用排序实现。...[prev+1,∞)中的数字,prev代表数组的最后一个值。
相关参考: 数组排序 使得交换次数最少 ,该文章中代码出现了一处错误,看起来作者好像很长时间没有更新了,在此纠正下。 TsReaper-6235....逐层排序二叉树所需的最少操作数目,参考该题解的评论区的作者解答,进行纠正。 贪心思想,每一步使得对应元素放到它该放的位置。...先将要排序的数组复制一份,然后将其排序,使用哈希表记录排序后的数组对应元素与其对应下标。 遍历原数组与排序后的数组,如果对应下标不相等,则根据哈希表记录该元素的下标进行交换。...} } return cnt; } 注意上述代码中,第二个for循环使用的是while,使用if会跳过某些元素。...逐层排序二叉树所需的最少操作数目 先层序遍历获取每层元素,然后对每层元素求有序最小的操作数目。
题目描述 解题思路 代码 复杂度分析 GitHub LeetCode 项目 题目描述 题目链接 给你一个整数数组 arr ,请你删除一个子数组(可以为空),使得 arr 中剩下的元素是 非递减 的。...一个子数组指的是原数组中连续的一个子序列。 请你返回满足题目要求的最短子数组的长度。...另一个正确的解为删除子数组 [3,10,4] 。 示例 2: 输入:arr = [5,4,3,2,1] 输出:4 解释:由于数组是严格递减的,我们只能保留一个元素。...所以我们需要删除长度为 4 的子数组,要么删除 [5,4,3,2],要么删除 [4,3,2,1]。...比如对于数组 1,2,3,10,4,2,3,5,先找到左边排序的段 1,2,3,10,右边排序的段 2,3,5,对于左边数组的第 i 位,和右边数组的第 j 位进行比较 如果 numi数组索引
题目描述 解题思路 代码 复杂度分析 GitHub LeetCode 项目 题目描述 题目链接 给定整数数组 A,每次 move 操作将会选择任意 Ai,并将其递增 1。...返回使 A 中的每个值都是唯一的最少操作次数。 示例 1: 输入:[1,2,2] 输出:1 解释:经过一次 move 操作,数组将变为 [1, 2, 3]。...示例 2: 输入:[3,2,1,2,1,7] 输出:6 解释:经过 6 次 move 操作,数组将变为 [3, 4, 1, 2, 5, 7]。...可以看出 5 次或 5 次以下的 move 操作是不能让数组的每个值唯一的。 解题思路 先对数组排序,之后对于每个元素,如果比前一个元素小,就一直加到比前一个元素大即可。每加一次,就是一次增量。
题目 给你两个整数数组 arr1 和 arr2,返回使 arr1 严格递增所需要的最小「操作」数(可能为 0)。...示例 3: 输入:arr1 = [1,5,3,6,7], arr2 = [1,6,3,3] 输出:-1 解释:无法使 arr1 严格递增。...解题 参考:题解 mike-meng dp[i][j] 表示前 i 个元素,替换 j 次,最后一个元素的最小值 class Solution { public: int makeArrayIncreasing...vector> dp(n1+1, vector(min(n1,n2)+1, INT_MAX)); // dp[i][j] 表示前 i 个元素,替换 j 次,最后一个元素的最小值...v,找到arr2中比 v 大的最小值 if(it !
题目 给你一个整数数组 nums (下标从 0 开始)。 每一次操作中,你可以选择数组中一个元素,并将它增加 1 。...请你返回使 nums 严格递增 的 最少 操作次数。...我们称数组 nums 是 严格递增的 ,当它满足对于所有的 0 的数组是严格递增的一种特殊情况。 示例 1: 输入:nums = [1,1,1] 输出:3 解释:你可以进行如下操作: 1) 增加 nums[2] ,数组变为 [1,1,2] 。...2) 增加 nums[1] ,数组变为 [1,2,2] 。 3) 增加 nums[2] ,数组变为 [1,2,3] 。
Leetcode-1574.删除最短的子数组使剩余数组有序 Leetcode-1574. 题目:给你一个整数数组 arr ,请你删除一个子数组(可以为空),使得 arr 中剩下的元素是非递减的。...一个子数组指的是原数组中连续的一个子序列。请你返回满足题目要求的最短子数组的长度。...首先我们的思路是双指针,一个从头部开始,一个从尾部开始; 尾部的先往前找,找到开始递增的临界点记录下来;然后再依次与头部的指针相对比; 下面我们直接看代码以及注释: int findLengthOfShortestSubarray...(int* arr, int arrSize) { int j = arrSize - 1; //j从尾部开始往前找(尾部往前是递减的),找到开始递增的的临界点的下标...,也要保证arr[i] > arr[i + 1]并且数组不越界,如果不满足条件,直接跳出循环,返回的这个len值就是最优解 if (arr[i] > arr[i + 1] && i
题目 给你两个长度相同的整数数组 target 和 arr 。 每一步中,你可以选择 arr 的任意 非空子数组 并将它翻转。你可以执行此过程任意次。...示例 1: 输入:target = [1,2,3,4], arr = [2,4,1,3] 输出:true 解释:你可以按照如下步骤使 arr 变成 target: 1- 翻转子数组 [2,4,1] ,...arr 变成 [1,4,2,3] 2- 翻转子数组 [4,2] ,arr 变成 [1,2,4,3] 3- 翻转子数组 [4,3] ,arr 变成 [1,2,3,4] 上述方法并不是唯一的,还存在多种将...arr 变成 target 的方法。
给定一个长度为 n 的 非空 整数数组,每次操作将会使 n - 1 个元素增加 1。找出让数组所有元素相等的最小操作次数。...示例: 输入: [1,2,3] 输出: 3 解释: 只需要3次操作(注意每次操作会增加两个元素的值): [1,2,3] => [2,3,3] => [3,4,3] => [4,4,4
最少移动次数使数组元素相等 1. 题目描述 给定一个非空整数数组,找到使所有数组元素相等所需的最小移动数,其中每次移动可将选定的一个元素加1或减1。您可以假设数组的长度最多为10000。...例如: 输入: [1,2,3] 输出: 2 说明:只有两个动作是必要的(记得每一步仅可使其中一个元素加1或减1): [1,2,3] => [2,2,3] => [2,2,2] 来源:力扣(LeetCode...题解 这道题偏数学一点,我们从常理推论的角度去想,如果要找到使所有数组元素相等的最小移动数。那么这个元素就是数组其他元素离它距离之和最近的数,这个元素就是数组中的中位数。...2.1 解题步骤 对数组元素进行排序 找到中位数 遍历数组,计算所有元素与中位数的距离 累加距离,即可得到目标值。...int result = 0; // 遍历数组,计算与中位数的距离 for (int num : nums) { result
题目 给定整数数组 A,每次 move 操作将会选择任意 A[i],并将其递增 1。 返回使 A 中的每个值都是唯一的最少操作次数。...示例 1: 输入:[1,2,2] 输出:1 解释:经过一次 move 操作,数组将变为 [1, 2, 3]。...示例 2: 输入:[3,2,1,2,1,7] 输出:6 解释:经过 6 次 move 操作,数组将变为 [3, 4, 1, 2, 5, 7]。...可以看出 5 次或 5 次以下的 move 操作是不能让数组的每个值唯一的。...解题 map计数,遍历map,计数不为1的,将多余的加入下一个数里面 class Solution { public: int minIncrementForUnique(vector
link给你一个正整数数组 nums,请你移除 最短 子数组(可以为 空),使得剩余元素的 和 能被 p 整除。 不允许 将整个数组都移除。...请你返回你需要移除的最短子数组的长度,如果无法满足题目要求,返回 -1 。子数组 定义为原数组中连续的一组元素。...我们可以移除子数组 [4] ,剩余元素的和为 6 。...示例 4:输入:nums = [1,2,3], p = 7输出:-1解释:没有任何方案使得移除子数组后剩余元素的和被 7 整除。...p的结果if sum[n] == 0 {return 0}modMap := map[int]int{0: -1}ret := len(nums)for i := 0; i < n; i++ {//寻找
题目 给你一个整数数组 nums ,你的目标是令 nums 中的所有元素相等。完成一次减少操作需要遵照下面的几个步骤: 找出 nums 中的 最大 值。...返回使 nums 中的所有元素相等的操作次数。...示例 1: 输入:nums = [5,1,3] 输出:3 解释:需要 3 次操作使 nums 中的所有元素相等: 1. largest = 5 下标为 0 。nextLargest = 3 。...示例 3: 输入:nums = [1,1,2,2,3] 输出:4 解释:需要 4 次操作使 nums 中的所有元素相等: 1. largest = 3 下标为 4 。nextLargest = 2 。...解题 使用 map 计数 找到末尾最大的两个数字,将最大的数字转为次大的数字即可,然后删除最大的,循环直到map只有一个数字 class Solution { public: int reductionOperations
题目 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。...代码 题目和书中有区别,书中没有要求相对位置不变,所以写了书中的快速排序,但是牛客要求位置不变,快排作为不稳定排序,没法通过,只能使用别的排序例如归并或者插入排序,也可以单独开辟数组。...public class Solution { public void reOrderArray(int [] array) { int count = 0;//记录已经摆好位置的奇数的个数
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。 思路:类似于插入排序。
题目描述 需要保证奇数和奇数,偶数和偶数之间的相对位置不变,这和书本不太一样。...例如对于 [1,2,3,4,5],调整后得到 [1,3,5,2,4],而不能是 {5,1,3,4,2} 这种相对位置改变的结果。...解题思路 方法一:创建一个新数组,时间复杂度 O(N),空间复杂度 O(N)。
题目 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。...解法一 书中作者提到一种初始的做法是,从头扫描整个数组,如果遇到偶数,则拿出这个数,并且把整个数组的数据都向前挪动一位,再把拿出的数放到末尾。...,创建一个新的数组,从头扫描,遇到偶数放后边,遇到奇数放前边。...扫描结束后,再将数组内容拷贝到原数组,这样整个时间复杂度为(n),而空间复杂度也为O(n),这样的方法实现简单,也不容易出错。...快速排序中,有一个分区操作,是将整个数组大于基准的部分,放右边,而小于基准的部分放右边,即根据基准,将数组一分为二。其实在这里,同样可以参考这个思路,只不过跟基准比大小,变成了判断是奇还是偶。
领取专属 10元无门槛券
手把手带您无忧上云