leecode

leecode--单链表移除链表元素,奇偶链表

六月ゝ 毕业季﹏ 提交于 2020-03-25 20:42:28
3 月,跳不动了?>>> 移除链表元素 删除链表中等于给定值val的所有节点 示例: 输入: 1->2->6->3->4->5->6, val = 6 输出: 1->2->3->4->5 此问题想着很简单,删除元素必须用到两个节点,一个节点cur用于遍历链表,另一个节点pre表示当前节点的前一个节点。但是还需要注意以下问题: 1)如果需要删除的是链表的头节点该如何处理? 2)如果需要删除的节点是链表中的所有节点如何处理? 3)pre节点和cur节点如何遍历? 一个链表的初始情况: 需要删除的节点是 2 ,第二步节点情况应该是 可以看出上述情况下,pre节点不用移动,而cur节点移向next即可 如果删除的节点是 3 ,第二步的节点情况应该是 此种情况下,pre节点只想cur,而cur指向本身的next 上述三种情况都处理完成后,则可以轻松写出如下代码。 /** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */ class Solution { public ListNode removeElements(ListNode head, int val) { if (null ==

leecode刷题(19)-- 最长公共前缀

守給你的承諾、 提交于 2020-03-18 21:48:45
leecode刷题(19)-- 最长公共前缀 最长公共前缀 编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀,返回空字符串 "" 。 示例 1: 输入: ["flower","flow","flight"] 输出: "fl" 示例 2: 输入: ["dog","racecar","car"] 输出: "" 解释: 输入不存在公共前缀。 说明: 所有输入只包含小写字母 a-z 。 思路: 这道题我用的是暴力破解的方法,遍历字符串数组,依次比较每个字符,如果都相等,则长度加一再比较,如果不相等,则返回之前的字符。 代码如下: class Solution { public String longestCommonPrefix(String[] strs) { if (strs.length == 0) return ""; StringBuilder res = new StringBuilder(); for (int i = 0; i < strs[0].length(); i++) { int j = 1; for (; j < strs.length; j++) { if (strs[j].length() <= i || strs[0].charAt(i) != strs[j].charAt(i)) { return res.toString(); } }

LeeCode每日一题-实现strStr()

时光怂恿深爱的人放手 提交于 2020-03-07 21:22:50
  【前言】坚持日更LeeCode刷题系列    不积跬步,无以至千里;不积小流,无以成江海。愿与诸君共勉!   【题目】28.实现strStr()函数    题目描述:实现 strStr() 函数。    给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回 -1。    示例: 示例 1: 输入: haystack = "hello", needle = "ll" 输出: 2 示例 2: 输入: haystack = "aaaaa", needle = "bba" 输出: -1    说明:    当 needle 是空字符串时,我们应当返回什么值呢?这是一个在面试中很好的问题。    对于本题而言,当 needle 是空字符串时我们应当返回 0 。这与C语言的 strstr() 以及 Java的 indexOf() 定义相符。    思路一: 通过python正则表达式中的search方法,匹配字符串。具体代码如下: import re class Solution ( object ) : def strStr ( self , haystack , needle ) : """ :type haystack: str :type needle: str

LeeCode每日一题--两数之和

若如初见. 提交于 2020-03-06 10:25:18
  【前言】坚持日更LeeCode刷题系列       不积跬步,无以至千里;不积小流,无以成江海。愿与诸君共勉!   【题目】1.两数之和   题目描述:给定一个整数数组 nums 和一个目标值 target ,请你在该数组中找出和为目标值的那 两个整数 ,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。   示例: 给定 nums = [2, 7, 11, 15], target = 9 因为 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1]   思路一:通过两层for循环,因为不能使用数组中同样的元素,第一层从头遍历到尾部元素减一,第二层遍历从第一层的 i 值遍历到尾。代码如下: class Solution ( object ) : def twoSum ( self , nums , target ) : """ :type nums: List[int] :type target: int :rtype: List[int] """ index = [ ] for i in range ( len ( nums ) - 1 ) : for j in range ( i , len ( nums ) ) : if ( i < j and nums [ i ] + nums [ j ] =

每天一更 Leecode每日一题--mergeTwoLists

瘦欲@ 提交于 2020-02-26 21:33:48
题目 将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例: 输入: 1 - > 2 - > 4 , 1 - > 3 - > 4 输出: 1 - > 1 - > 2 - > 3 - > 4 - > 4 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/merge-two-sorted-lists 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 解题 做了这么久的题目终于有个明显的算法题 it is 链 表 题 \color{red}{链表题} 链 表 题 官方解法有两种 我只用第二种 因为好解释… 方法 2:迭代 想法 我们可以用迭代的方法来实现上述算法。我们假设 l1 元素严格比 l2元素少,我们可以将 l2 中的元素逐一插入 l1 中正确的位置。 算法 首先,我们设定一个哨兵节点 “prehead” ,这可以在最后让我们比较容易地返回合并后的链表。我们维护一个 prev 指针,我们需要做的是调整它的 next 指针。然后,我们重复以下过程,直到 l1 或者 l2 指向了 null :如果 l1 当前位置的值小于等于 l2 ,我们就把 l1 的值接在 prev 节点的后面同时将 l1 指针往后移一个。否则,我们对 l2 做同样的操作

leecode刷题(23)-- 合并两个有序链表

若如初见. 提交于 2020-01-23 22:43:20
leecode刷题(23)-- 合并两个有序链表 合并两个有序链表 将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例: 输入:1->2->4, 1->3->4 输出:1->1->2->3->4->4 思路: 这道题我们可以用递归的方法来处理。首先我们可以设置一个临时头节点 head,当链表 l1 和链表 l2 不为空时,对它们进行比较。如果 l1 对应的节点小于或等于 l2 对应的节点,则将 head 与 l1 的节点连接;如果 l1 对应的节点大于 l2 对应的节点,则将 head 与 l2 的节点连接。然后一直递归执行这个过程,直到合并为一个有序链表,输出结果。 代码如下: /** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */ class Solution { public ListNode mergeTwoLists(ListNode l1, ListNode l2) { if (l1 == null) return l2; if (l2 == null) return l1; ListNode head = null

IDe的小技巧(①51nod②Leecode③牛客网)

我们两清 提交于 2020-01-19 14:18:17
1. 51nod操作技巧 1.1 实验步骤 (1)题目中出现的数组足够大, 可以设为a[100000];(足够大); (2)耗时问题:需要改进算法;’ 1.2常见问题&解决之道 序号 q(English) c(中文) w(解决之道) 1输出 wrong answer 错误的输出 通过测试工具发现,不要用printf{}输出其他信息 2输入 error: invalid operands to binary & (have ‘int *’ and ‘int’) scanf("%d %d %d", &a &b &c); 错误的二进制符号& 多个变量之间需要用,连接起来 3(条件if-else) if >>>else if ##后面表示有限的分类的时候,可以有多个else if,而没有else 4 (switch) duplicate varies case ##多个case相同输出的表示 错误:case(1||2):printf();break; 正确 case 1: case2:printf();break; 5 51node里面的 读入a, b, c三个整数(其中a< b < c) /或者a<25 ##这些都是输入的前提,不需要进行判断 6.循环 6.1 先给定n,再给定n个整数,请计算出里面所有正数的和 ##分析:①结果sum;②循环体:n;③输入一个数;中间变量x进行引入 2

leecode刷题(29)-- 二叉树的中序遍历

笑着哭i 提交于 2019-12-24 06:19:36
leecode刷题(29)-- 二叉树的中序遍历 二叉树的中序遍历 给定一个二叉树,返回它的 中序 遍历。 示例: 输入: [1,null,2,3] 1 \ 2 / 3 输出: [1,3,2] 思路 跟上一道题一样,用递归的思想很快就能解决。 中序遍历: 先处理左子树,然后是根,最后是右子树。 代码如下 Java 描述 /** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ class Solution { List<Integer> list = new ArrayList(); public List<Integer> inorderTraversal(TreeNode root) { if (root != null) { inorderTraversal(root.left); list.add(root.val); inorderTraversal(root.right); } return list; } } python 描述 # Definition for a binary tree node. # class

leecode刷题(24)-- 翻转二叉树

匿名 (未验证) 提交于 2019-12-02 23:32:01
翻转一棵二叉树。 示例: 输入: 4 / \ 2 7 / \ / \ 1 3 6 9 输出: 4 / \ 7 2 / \ / \ 9 6 3 1 备注: 这个问题是受到 Max Howell 的 原问题 启发的 : 谷歌:我们90%的工程师使用您编写的软件(Homebrew),但是您却无法在面试时在白板上写出翻转二叉树这道题,这太糟糕了。 ˼· 二叉树问题,我们首先要想到的使用递归的方式来解决,有了这个思路,处理这道问题就很简单了:先互换根节点的左右节点,然后递归地处理左子树,再递归地处理右子树,直到所有的节点互换完,最后我们把 root 返回,这样便完成了二叉树的反转。 Java描述: /** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ class Solution { public TreeNode invertTree(TreeNode root) { if (root != null) { TreeNode temp = root.left; root.left = root.right; root.right = temp;

Python刷题之路,怎样做才能让技术突飞猛进

▼魔方 西西 提交于 2019-11-28 06:01:05
比你优秀的人比你还努力 这个世界最可悲的就是 , 比你优秀的人比你还努力 偶然的机会,通过Python认识了一位华为的文职工作人员。起初只是问我,Python初学者看什么书能快速入门。而两个月过后,她已经开始每天在Leecode上刷题了。虽然有时半夜微信收到她刷题刷到崩溃的消息,或者针对部分Python语法的疑问,但作为一位文职大厂的优秀员工,她却比很多本该靠着代码吃饭的人更为努力。 今天这篇文章,就写给那些希望学习Python,但在刷题路上迷茫或者找不到方向的朋友们。文章仅代表个人观点,不喜勿喷。 Leecode刷题 起初学习python,我就是秉承着什么好玩学什么的想法,东一榔头西一棒子的跳着模块学习。看着很多方面都有所涉及,但遇到正儿八经的开发代码时,就歇菜了。基础的字符串、列表、字典操作,都经常出错。后来才意识到,为了学习模块而去学习,那只是高屋建瓴,底子差是硬伤。 一开始看到菜鸟教程上有Python100练,就在网上找了个打包好的全套练习题,PDF下载地址在我之前发的文章中: Python面试的一些心得,与练习题分享 这套题型挺全面的,但是基础和算法的内容比较少,所以开始去Leecode刷题。今天就借着前几天这位朋友问的一道题,谈谈如何在刷题中终结知识,提高刷题效率吧。 刷题案例 在引用朋友的代码前,提前和她打了个招呼: 我真的是很认真去写文章的,第一句话只是寒暄而已