面试题目 给定一个链表,判断链表中是否有环. 难度升级: 试试能否在不使用额外空间解决此问题? 解决方案(哈希表) 思路 我们可以通过检查一个结点此前是否被访问过来判断链表是否为环形链表.常用方法,一
Given a string s, find the longest palindromic substring in s. You may assume that the maximum length of s is 1000.
一般情况下,遍历数组(或者字符串)操作,都是采用单指针从前往后或者从后往前依次访问数组(或者字符串)中的元素。
在本文中,将分享一些常见的编程面试问题,这些问题来自于不同经验水平的程序员,囊括从刚大学毕业的人到具有一到两年经验的程序员。
“两个指针”是一种模式,其中两个指针串联遍历数据结构,直到一个或两个指针都达到特定条件。两个指针在排序数组或链接列表中搜索对时通常很有用;例如,当您必须将数组的每个元素与其他元素进行比较时。
LeetCode 题目: 回文链表 请判断一个链表是否为回文链表。 示例1: 输入: 1->2 输出: false 示例2: 输入: 1->2->2->1 输出: true 进阶 你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题? 方案: 便利链表,取出值val存入数组,便利数组对比头尾 代码: /** * Definition for singly-linked list. * public class ListNode { * public var val: Int
假设我们的环境只能存储 32 位有符号整数,其数值范围是 [−2^31, 2^31 − 1]。根据这个假设,如果反转后的整数溢出,则返回 0。
选自GitHub 作者:Sherali Obidov 机器之心编译 参与:李亚洲、微胖、蒋思源 该资源是算法、数据结构以及面试问题解决方案的集合,里面的 repository 包含了我对常见算法问题的解答以及数据结构的实现(用 Java)。该资源集合处于持续更新中。 项目地址:https://github.com/sherxon/AlgoDS 目前为止,该资源集合提供了算法、数据结构以及 200 道面试题的答案。 问题 问题被分成了三个等级: 简单问题:http://suo.im/262F7q 中等问题:
一、160. 相交链表 给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。 图示两个链表在节点 c1 开始相交 题目数据 保证 整个链式结构中不存在环。 注意,函数返回结果后,链表必须 保持其原始结构 。 自定义评测: 评测系统 的输入如下(你设计的程序 不适用 此输入): intersectVal - 相交的起始节点的值。如果不存在相交节点,这一值为 0 listA - 第一个链表 listB - 第二个链表 sk
You are given two non-empty linked lists representing two non-negative integers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list.
今天聊聊如何判断一个链表是不是回文链表。之前有两篇文章写了回文串和回文序列相关的问题:
考虑 nums 的唯一元素的数量为 k ,你需要做以下事情确保你的题解可以被通过:
因为回文串长度可能为奇数也可能是偶数,长度为奇数时只存在一个中心点,而长度为偶数时存在两个中心点,所以上面这个函数需要传入l和r。
给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。
今天又到了算法的主题了,上次我们聊到了数组:面试中的疑难点,这次我们来聊另外一种线性结构,链表。
在 N * N 的网格中,我们放置了一些与x,y,z 三轴对齐的 1 * 1 * 1 立方体。每个值 v = grid[i][j] 表示 v 个正方体叠放在单元格 (i, j) 上。现在,我们查看这些立方体在xy、yz 和 zx平面上的投影。
判断一个单链表是否为回文链表目前有两种实现思路。一种是通过数组记录前半部分与后半部分依次比较,一种是找到链表中间结点,将左半部分反转与右半部分依次比较,下面详细介绍。
对很多开发者来说,编程工作的面试准备很容易让人焦虑。面试要涉及的东西实在太多,其中很多还往往与开发者的日常工作无关,只会额外增添压力。
先遍历一遍链表,用栈对链表进行顺序存储。由于栈有先进后出的特点,所以只需要再一次遍历链表将栈顶的值和链表中的值进行比较,这样做等价于栈维护了一个逆序链表,所谓回文的意思就是逆序链表和正序链表相同,如果遍历的过程中出现值不相等,那么证明该链表不是回文链表,反之则是回文链表。当然这并不是最优解,因为消耗了O(n)的空间,也遍历了2次链表
为了回馈各位粉丝,礼尚往来,给大家准备了一条多年积累下来的优质资源,包括 学习视频、面试资料、珍藏电子书等
3、在遍历的过程中,如果发现两个节点不一样,那么就不是回文,否则继续判断接下来的节点是否相同。
给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回 true ;否则,返回 false 。
所谓左右指针,就是两个指针相向而行或者相背而行;而所谓快慢指针,就是两个指针同向而行,一快一慢。
Given a string, find the length of the longest substring without repeating characters.
/ 示例 1: 输入: “()” 输出: 1 / 示例 2: 输入: “(())” 输出: 2 / 示例 3: 输入: “()()” 输出: 2 / 示例 4: 输入: “(()(()))” 输出: 6 / 提示: S 是平衡括号字符串,且只含有 ( 和 ) 。 2 <= S.length <= 50
若要满足 O(1) 空间复杂度,则不能借助于列表或栈结构存储数据。因为单链表不像字符串可以进行直接访问,所以这里采用的方式为,找到单链表中间元素,并反转单链表前半部分,然后与单链表后半部分进行比较是否为回文结构。
空间复杂度:O(n),这种解法,我们使用了一个数组列表存放链表的元素值。n 指的是链表的元素个数。
其实,可能性问题使用动态规划要比使用 DFS、BFS 算法更加简单而容易理解。(我使用 DFS 经常报 TLE)
对于许多开发人员而言,编写采访编码的过程会引起焦虑。涉及的内容太多,常常感觉很多与开发人员在日常工作中所做的事情无关,这只会增加压力。
可以枚举出所有的组合方案,然后验证下是否满足重量小于某个值,记录下满足条件的价值最大的方案。
承接第3篇文章《开启算法之路,还原题目,用debug调试搞懂每一道题》,本篇文章继续分享关于链表的算法题目。
https://www.nowcoder.com/practice/d281619e4b3e4a60a2cc66ea32855bfa?tab=note
这里使用Stack来解决,先遍历一遍放到Stack中,之后再次遍历,挨个跟stack.pop出来的比较
力扣(LeetCode)定期刷题,每期10道题,业务繁重的同志可以看看我分享的思路,不是最高效解决方案,只求互相提升。
这样,通过遍历字符串,以每个字符及相邻字符为中心,不断扩展找到所有可能的回文串,最终得到最长回文串的长度和起始位置。 函数 Pame(s, l, r) 的作用是在给定字符串 s 中,以指定的左右指针 l 和 r 为中心,向两端扩展,寻找回文串。这个函数的具体实现应该考虑到奇数长度和偶数长度的情况。
一个 5 位数,判断它是不是回文数。即 12321 是回文数 ,个位与万位相同,十位与千位相同。
在练习之前,首先阐明一下我的观点,以免大家对数据结构和算法或者这个系列产生更多的误解。
题目地址:https://leetcode-cn.com/problems/palindrome-linked-list-lcci/
在下面的介绍中,会发现将创建结点的代码单独放在了一个函数中,我们知道,一个变量出了函数的作用域会由于栈帧的操作释放该变量,导致返回值不能使用,但是这个为什么可以呢?
作者注:算法能力一直是程序猿最基础也是最重要的一项基础能力,记得Pascal之父、结构化程序设计的先驱Niklaus Wirth最著名的一本书,书名叫作《算法 + 数据结构 = 程序》,算法与数据结构之于程序设计的重要性不言自明,作者本身也非常注重基础算法能力的培养,除了平常阅读一些算法书籍如《算法导论》、《算法》《数据结构与算法Java语言描述》外,也非常关注一些公众号提供的有关算法的描述跟讲解,但是这些算法的描述一般都是只会给出一些伪代码或者思路。我的公众号里我会不定期的对一些常见算法做讲解,并用js语
这道题呢是让我们判断一个链表是否是回文结构。但是题目要求设计一个时间复杂度为O(n),额外空间复杂度为O(1)的算法。 所以如果我们想把链表的值存到一个数组中再去判断就不可行了。
领取专属 10元无门槛券
手把手带您无忧上云