首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

普林斯顿算法讲义(一)

只使用加法和减法的二分查找。 [Mihai Patrascu] 编写一个程序,给定一个按升序排列的包含n个不同整数的数组,确定给定的整数是否在数组中。你只能使用加法和减法以及恒定数量的额外内存。...给定一组可比较的元素,x 的上取整是集合中大于或等于 x 的最小元素,下取整是小于或等于 x 的最大元素。假设你有一个按升序排列的包含 N 个项的数组。...给定一个 n×n 的元素数组,使得每行按升序排列,每列也按升序排列,设计一个 O(n)的算法来确定数组中是否存在给定元素 x。你可以假设 n×n 数组中的所有元素都是不同的。...我们的主要关注点是重新排列包含关键字的项目数组的算法,目标是重新排列项目,使它们的关键字按升序排列。在 Java 中,关键字的抽象概念在内置机制中���现为Comparable接口。...因此,要检查Sort5.java是否有效,你只需要在 32 个可能的由 0 和 1 组成的输入上测试它。 最佳的无视排序(具有挑战性)。

13210

精读《算法 - 回溯》

电话号码的字母组合 电话号码的字母组合是一道中等题,题目如下: 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。...复原 IP 地址 复原 IP 地址是一道中等题,题目如下: 给定一个只包含数字的字符串,用以表示一个 IP 地址,返回所有可能从 s 获得的 有效 IP 地址 。你可以按任何顺序返回答案。...这道题输入很直白,直接给出来了,其实不是每道题的输入都这么容易想,我们看下一道全排列。 全排列 全排列是一道中等题,题目如下: 给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。...下一个排列 下一个排列是一道中等题,题目如下: 实现获取 下一个排列 的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。...给你一个整数 n ,返回所有不同的 n 皇后问题 的解决方案。 每一种解法包含一个不同的 n 皇后问题 的棋子放置方案,该方案中 'Q' 和 '.' 分别代表了皇后和空位。

61110
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【回溯】算法思想,附两道道面试手撕题

    回溯算法 回溯算法是一种通过深度优先搜索(DFS)来解决问题的算法策略。它的核心思想是在搜索过程中,逐步构建问题的解,当发现当前路径不可能产生正确的完整解时,就回溯到上一步,尝试其他可能的路径。...注意:可以对比下回溯模版,是否有相似之处。 算法题 第 K 排列 描述 给定参数n,从1到n会有n个整数:1,2,3,…,n,这n个数字共有n!种排列。...按大小顺序升序列出所有排列的情况,并一一标记, 当n=3时,所有排列如下: “123” “132” “213” “231” “312” “321” 给定n和k,返回第k个排列。...:param nums: 剩余的数字列表。 :param current: 当前生成的排列。 :param result: 存储所有排列的结果列表。...输入描述 给定的字符列表和结果字符串长度,中间使用空格(" ")拼接 输出描述 满足条件的字符串个数 题解 我们定义一个函数generateDistinctStrings,它接受以下参数: s:一个包含可用字符的集合

    9710

    数据结构思维 第十三章 二叉搜索树

    我使用递归编写了这个方法,使它更易于阅读,但它可以直接用迭代重写一遍,你可能想留作练习。 13.4 中序遍历 我要求你编写的最后一个方法是keySet,它返回一个Set,按升序包含树中的键。...但是对于大多数应用程序,不能保证树是满的。一般来说,树的形状取决于键和添加顺序。 为了看看这在实践中是怎么回事,我们将用两个样本数据集来测试我们的实现:随机字符串的列表和升序的时间戳列表。...UUID 对于各种应用是有用的,但在这个例子中,我们利用一种简单的方法来生成随机字符串。 我使用n=16384来运行这个代码,并测量了最后的树的运行时间和高度。...每次我们调用它时,我们得到一个更大的数字。当我们将这些时间戳转换为字符串时,它们按字典序增加。...你可以制作一棵树,如果碰巧按顺序处理键,那么它会更好地处理键。 第二个解决方案是更好的,有几种方法可以做到。最常见的是修改put,以便它检测树何时开始变得不平衡,如果是,则重新排列节点。

    27910

    如何进入Google,面试算法之道:在双升序二维数组中的快速查找

    给定一个二维数组,它的行和列都是已经按升序排列,请设计一个算法,对于给定某个值x,判断该值是否包含在数组中。...在我们以前的算法讨论中曾经提到过一个法则,当看到有数组时,首先想到的就是排序。如果看到排序,首先想到的是二分查找,对于给定数组,它已经排好序了,那么我们可以考虑用二分查找来判断给定元素是否在数组中。...第二种做法就是使用二分查找,由于每一行都是升序排列的,那么我们可以对应于一行,先用二分查找法,探寻给定元素是否在某一行,如果不再这行,那么我们选择新一行,再次使用二分查找去检测给定元素是否存在给定行。...题目给定的特征是,数组的行和列都是升序排序的,第二种做法只利用了行是升序排列这一性质,对于列的升序排列并未利用到,如果能够利用到这一特性的话,那么我们就可以设计出更高效的算法,由此我们得到第三种算法如下...,并设置要查询的数值为34,显然该值包含在数组中,然后调用TwoDArraySearch 的search()函数,上面代码运行后结果如下: ?

    1.5K30

    普林斯顿算法讲义(三)

    DepthFirstOrder.java 计算这些顺序。 拓扑排序:给定一个有向图,按顶点顺序排列,使得所有的有向边都从顺序中较早的顶点指向顺序中较晚的顶点(或报告无法这样做)。...Hex2Decimal.java 包含一个函数,该函数接受一个十六进制字符串(使用 A-F 表示数字 11-15)并返回相应的十进制整数。它使用了一些字符串库方法和霍纳方法。...(原地键索引计数)给定一个包含 N 个介于 0 和 R-1 之间的不同值的数组,以线性时间和 O® 的额外空间对它们进行升序排列。导致(本质上)原地字符串排序。...编写一个 Java 正则表达式,匹配包含恰好五个元音字母且元音字母按字母顺序排列的所有字符串。...维护两个 FIFO 队列:第一个队列包含输入符号,按频率升序排列,第二个队列包含组合权重的内部节点。只要两个队列中有超过一个节点,就通过检查两个队列的前端出队两个权重最小的节点。

    17210

    记第一次参加PAT(附题解)

    例如 3×92​2​​=25392,而 25392 的末尾两位正好是 92,所以 92 是一个 3-自守数。 本题就请你编写程序判断一个给定的数字是否关于某个 N 是 N-自守数。...若想评比出一种“最好吃”的月饼,那势必在吃货界引发一场腥风血雨…… 在这里我们用数字说话,给出全国各地各种月饼的销量,要求你从中找出销量冠军,认定为最好吃的月饼。...字符串A+B (20 分) 题目描述: 给定两个字符串 A 和 B,本题要求你输出 A+B,即两个字符串的并集。要求先输出 A,再输出 B,但重复的字符必须被剔除。...其中粗体标出的 10 位数就是答案。 本题要求你编程解决一个更通用的问题:从任一给定的长度为 L 的数字中,找出最早出现的 K 位连续数字所组成的素数。...输出格式: 在一行中输出 N 中最早出现的 K 位连续数字所组成的素数。如果这样的素数不存在,则输出 404。注意,原始数字中的前导零也计算在位数之内。

    89710

    【C语言经典例题】——程序员必须会的经典基础例题(三)

    n表示第二行第一个升序序列中数字的个数,m表示第三行第二个升序序列中数字的个数。 第二行包含n个整数,用空格分隔。 第三行包含m个整数,用空格分隔。...输出描述: 输出为一行,输出长度为n+m的升序序列,即长度为n的升序序列和长度为m的升序序列中的元素重新进行升序序列排列合并。...与上面的题思路一样,列举所有可能,然后只会存放在一种是符合题意的 #include int main() { //凶手 char killer = '0'; //ABCD中的一个...经过函数后变为:beijing. like I 输入描述: 每个测试输入包含1个测试用例: I like beijing....写一个函数,判断一个字符串是否为另外一个字符串旋转之后的字符串。

    68140

    数据结构和算法

    在该结构中,在一端插入新元件,从另一端移除现有元件。 ? image Max-Heap:堆是基于树的数据结构,其中树的所有节点都按特定顺序排列。最大堆是二叉树。它是完整的。...image ** 后缀树(Suffix tree):**后缀trie是包含给定文本的所有后缀的trie。后缀特里允许特别快速地实现许多重要的字符串操作。 ? image 2....Java集合 Java集合框架是作为核心java的一部分包含的集合类型集。它提供了可以直接用于操作数据结构的API或方法,例如数组,链接列表,栈,队列,集合和映射。...线性搜索:线性搜索是一种在列表中查找目标值的方法。它按顺序检查列表中每个元素的目标值,直到找到匹配项或者直到搜索完所有元素为止。 ?...image 二进制搜索:二进制搜索是一种有效的算法,用于从有序的项目列表中查找项目。它的工作原理是反复将列表中可能包含该项目的部分分成两半; 直到你将可能的位置缩小到一个。

    2K40

    800道面试题和43道JAVA算法数据结构面试题

    今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?...7、题目: 汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。...请将这个算法编写成一个函数,给定两个字符串s1和s2,请编写代码检查s2是否为s1旋转而成,要求只能调用一次检查子串的函数。 给定两个字符串s1,s2,请返回bool值代表s2是否由s1旋转而成。...测试样例: [11,13,10,5,12,21,3],7[12,21,12,12,21,-1,-1] 27、题目: 请编写一个程序,按升序对栈进行排序(即最大元素位于栈顶),要求最多只能使用一个额外的栈存放临时数据...30、题目: 对于一个元素各不相同且按升序排列的有序序列,请编写一个算法,创建一棵高度最小的二叉查找树。 给定一个有序序列int[] vals,请返回创建的二叉查找树的高度。

    1.2K50

    Java基础入门笔记06——String类和StringBuffer类,Java中的三大集合,Set集合,List集合,Map集合,Collection类

    的区别 equals()仅判断值是否相等 “==”判断值还要判断引用是否相等 Java的三种集合 都是接口,需要具体类实现 集合类存在于java.util包中,是一个用来存放对象的容器 集合只能存放对象...如果存放int型数据,会自动转换为Integer类的对象存入。(Java中每一种基本类型都有对应的引用类型) 集合中存放的是多个对象的引用,对象本身还是存放在堆内存。...自定义的类需要实现接口Comparator(java.util),实现这个接口的时候,一定要实现它里面的抽象方法compare package setStudy1117; import java.util.Comparator...,默认按元素添加顺序设置元素索引(有点类似数组的下标) List集合中添加了一些根据索引来操作集合元素的方法 package setStudy1117; import java.util.ArrayList...): 根据比较器Comparator的方法compare()返回给定集合中的最大元素(或最小min) package setStudy1117; import java.util.ArrayList

    63310

    【JAVA-Day52】深度解析 Java TreeSet 集合

    引言 在Java的集合框架中,TreeSet是一种基于红黑树实现的有序集合。本文将带领读者逐步深入,从基础概念到实际应用,全面解析TreeSet集合的特点和使用方法。...一、初探 TreeSet TreeSet是Java集合框架中的一种有序集合,它使用红黑树作为内部数据结构来存储元素。...从任何给定节点到其每个叶子的路径都包含相同数量的黑色节点,这确保了树的平衡性。...六、应用场景和面试题 6.1 TreeSet类的应用场景 TreeSet在实际应用中有多种应用场景,包括但不限于: 有序集合:TreeSet用于需要按照升序排列元素的场景,如日历应用中按日期排序的事件列表...TreeSet是有序集合,按升序排列元素,同时确保唯一性;HashSet是无序集合,没有排序保证,但同样确保唯一性。选择TreeSet通常是因为需要元素有序,或需要范围查询、排名等功能。

    11510

    一文多图带你看看如何用「对撞指针」思想巧解数组题目

    01 LeetCode #167 两数之和|| 题目描述: 给定一个已按照升序排列的有序数组,找到两个数使得它们相加之和等于目标数。...通过上述分析,由于题目中给定的是一个按照升序排列的数组,我们可以初步得出一个结论,那就是对于该题目来说:并不是数组中的每个数都需要和剩余的数逐一进行求和计算。 那么怎么避免这种情况呢?...res; } ‍ 02 LeetCode #125 验证回文串 题目描述: 给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。...说明:本题中,我们将空字符串定义为有效的回文串 示例: 输入: "race a car" 输出:false ---- 思路分析: 回文串是一种从左到右读和从右到左读都一样的字符串。...题目中描述的回文串是忽略字母大小写并且只考虑字母和数字字符。 接下来以字符串"@CaTnAc#"为例来看一下如何用对撞指针的方法判断一个字符串是否是回文串。 ?

    1.1K31

    Java 编程问题:一、字符串、数字和数学

    检查字符串是否只包含数字:编写一个程序检查给定字符串是否只包含数字。 计数元音和辅音:编写一个程序,计算给定字符串中元音和辅音的数量。对于英语,有五个元音(a、e、i、o 和 u)。...生成所有排列:编写一个程序,生成给定字符串的所有排列。 检查字符串是否为回文:编写一个程序,确定给定的字符串是否为回文。 删除重复字符:编写一个程序,从给定字符串中删除重复字符。...按长度排序字符串数组:编写按给定字符串数组长度排序的程序。 检查字符串是否包含子字符串:编写程序检查给定字符串是否包含给定子字符串。...首先,捕捉NumberFormatException并在catch块中进行业务逻辑决策是不好的做法。其次,这些方法验证字符串是否为有效数字,而不是仅包含数字(例如,-4 有效)。...在我们的例子中,状态可以通过给定字符串的字母来具体化。初始状态包含初始字符串,每个连续状态可通过以下公式计算字符串的每个字母将成为字符串的第一个字母(交换位置),然后使用递归调用排列所有剩余字母。

    81310

    Java Arrays工具类的使用

    Arrays 类 java.util.Arrays类能方便地操作数组,它提供的所有方法都是静态的。具有以下功能: 给数组赋值:通过fill方法。 对数组排序:通过sort方法,按升序。...比较数组:通过equals方法比较数组中元素值是否相等。 查找数组元素:通过binarySearch方法能对排序好的数组进行二分查找法操作。...具体说明请查看下表: 序号 方法和说明 1 public static int binarySearch(Object[] a, Object key)用二分查找算法在给定数组中搜索给定值的对象(Byte...如果两个数组包含相同数量的元素,并且两个数组中的所有相应元素对都是相等的,则认为这两个数组是相等的。换句话说,如果两个数组以相同顺序包含相同的元素,则两个数组是相等的。...同样的方法适用于所有的其他基本数据类型(Byte,short,Int等)。 4 public static void sort(Object[] a)对指定对象数组根据其元素的自然顺序进行升序排列。

    54130

    Java Arrays工具类的使用

    Arrays 类 java.util.Arrays类能方便地操作数组,它提供的所有方法都是静态的。具有以下功能: 给数组赋值:通过fill方法。 对数组排序:通过sort方法,按升序。...比较数组:通过equals方法比较数组中元素值是否相等。 查找数组元素:通过binarySearch方法能对排序好的数组进行二分查找法操作。...具体说明请查看下表: 序号 方法和说明 1 public static int binarySearch(Object[] a, Object key)用二分查找算法在给定数组中搜索给定值的对象(Byte...如果两个数组包含相同数量的元素,并且两个数组中的所有相应元素对都是相等的,则认为这两个数组是相等的。换句话说,如果两个数组以相同顺序包含相同的元素,则两个数组是相等的。...同样的方法适用于所有的其他基本数据类型(Byte,short,Int等)。 4 public static void sort(Object[] a)对指定对象数组根据其元素的自然顺序进行升序排列。

    79880

    变换排列与最长括号—— LeetCode 第 31、32 题记

    所以,今天的目标是,做完这两道题,可以掌握题解中更优的方法来独立解决问题。 第一题 「第 31 题:下一个排列」 实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。...如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。 必须原地修改,只允许使用额外常数空间。 以下是一些例子,输入位于左侧列,其相应输出位于右侧列。...我们继续看下一题咯~ 第二题 「第 32 题:最长有效括号」 给定一个只包含 '(' 和 ')' 的字符串,找出最长的包含有效括号的子串的长度。...关于暴力解法,就是遍历字符串,若该位是左括号,那么就对它之后的遍历,直到不满足括号的匹配规则结束,记录长度;对每一位字符都进行如此运算,最后取最大值。...栈的解法 首先应用栈的解法,一种思路就是我们用栈(即列表)来记录字符串中左括号出现的情况:我们对字符串遍历,遇到左括号,就将它记录在 record 栈(列表)中;当遇到右括号时,我们先看栈中是否有左括号记录

    49320

    前端系列11集-ES6 知识总结

    返回一个数组,包含对象自身的所有 Symbol 属性的键名 Reflect.ownKeys 返回一个数组,包含对象自身的(不含继承的)所有键名,不管键名是 Symbol 或字符串,也不管是否可枚举...首先遍历所有数值键,按数值升序排列其次遍历所有字符串键,按加入时间升序排列最后遍历所有 Symbol 键,按加入时间升序排列 super 关键字 指向当前对象的原型对象,只能用在对象的方法之中使用 扩展运算符...表示数组是否包含给定的值 返回布尔值 fill 使用给定值填充一个数组 遍历 keys 对键名的遍历 values 对键值的遍历 entries 对键值对的遍历 都返回一个遍历器对象可以用 for...normalize Unicode 正规化,用来将字符的不同表示方法统一为同样的形式 查找字符 includes 表示是否找到了参数字符串 startsWith 表示参数字符串是否在原字符串的头部 endsWith...表示参数字符串是否在原字符串的尾部 repeat 返回一个将原字符串重复 n 次的新字符 padStart 头部补全 padEnd 尾部补全 replaceAll 一次性替换所有匹配 第二个参数支持特殊字符匹配

    17620
    领券