每日一算法
爱谁谁未成年
一个热爱编程的人
展开
-
给定一个整数数组,找出其中两个数相加等于目标值
1.查找法两层遍历,最直观时间复杂度: O(N*N)代码实现:public int[] twoSum(int[] numbers, int target) { // write your code here int[] result = new int[2]; int firstIndex = 0; int sec...原创 2019-02-21 15:11:21 · 2022 阅读 · 0 评论 -
二叉树中序遍历
题目描述给出一棵二叉树,返回其中序遍历算法思路中序遍历,左根右,使用递归方式实现代码实现(JAVA)public List<Integer> inorderTraversal(TreeNode root) { List<Integer> result = new ArrayList<Integer>(); t...原创 2019-03-01 10:11:22 · 176 阅读 · 0 评论 -
二叉树的路径和
题目描述给定一个二叉树,找出所有路径中各节点相加总和等于给定目标值的路径。一个有效的路径,指的是从根节点到叶节点的路径。样例给定一个二叉树,和目标值 = 5: 1 / \ 2 4 / \ 2 3返回:[ [1, 2, 2], [1, 4]]代码实现(JAVA)/** * Definition of T...原创 2019-03-01 10:57:21 · 787 阅读 · 0 评论 -
二叉树的最大深度
题目描述给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的距离。样例样例 1:输入: tree = {}输出: 0 样例解释: 空树的深度是0。样例 2:输入: tree = {1,2,3,#,#,4,5}输出: 3样例解释: 树表示如下,深度是3 1 / \ 2 3 ...原创 2019-03-01 11:32:20 · 239 阅读 · 0 评论 -
水仙花树
题目描述水仙花数的定义是,这个数等于他每一位上数的幂次之和见维基百科的定义比如一个3位的十进制整数153就是一个水仙花数。因为 153 = 13+ 53+ 33。而一个4位的十进制数1634也是一个水仙花数,因为 1634 = 14+ 64+ 34+ 44。给出n,找到所有的n位十进制水仙花数。样例比如 n =1, 所有水仙花数为:[0,1,2,3,4,5,6...转载 2019-03-04 22:12:01 · 530 阅读 · 0 评论 -
合法文章
描述:给定一篇由大写字母、小写字母、逗号、句号组成的文章,求使文章不合法的字母数。文章不合法有2种情况:1.句子的第一个字母用了小写。2.不是单词的首字母用了大写。代码实现(Java): public int count(String s) { // Write your code here. boolean st = true; ...原创 2019-02-25 20:11:02 · 376 阅读 · 0 评论 -
搜索插入位置
描述:给定一个排序数组和一个目标值,如果在数组中找到目标值则返回索引。如果没有,返回到它将会被按顺序插入的位置。代码实现(Java):(时间复杂度为 O(log n),使用二分法)public int searchInsert(int[] A, int target) { // write your code here if (A == null ||...原创 2019-02-26 10:29:26 · 116 阅读 · 0 评论 -
落单的数
题目叙述:找出数组中只出现一次的数字方法:采用异或技巧异或的特点:即两个相同的数异或结果为0思路:任何一个数字异或它自己都等于0 。也就是说,如果我们从头到尾依次异或数组中的每一个数字,那么最终的结果刚好是那个只出现一次的数字,因为那些出现两次的数字全部在异或中抵消掉了。代码(Java):public class Solution { public i...原创 2019-02-21 10:03:25 · 392 阅读 · 0 评论 -
合并数字
描述:给出n个数,现在要将这n个数合并成一个数,每次只能选择两个数a,b合并,每次合并需要消耗a+b的能量,输出将这n个数合并成一个数后消耗的最小能量。算法:贪心算法:显然每次选择当前的最小的两个数进行合并的答案是最优的,故用一个优先队列,大根堆,每次选堆顶的两个元素进行合并,然后再扔进堆里即可,时间复杂度O(nlogn)O(nlogn)。代码实现(JAVA): publi...原创 2019-02-26 16:49:56 · 613 阅读 · 0 评论 -
多关键字排序
描述给定 n 个学生的学号(从 1 到 n 编号)以及他们的考试成绩,表示为(学号,考试成绩),请将这些学生按考试成绩降序排序,若考试成绩相同,则按学号升序排序。代码实现(Java): /** * 多关键字排序 */ public int[][] multiSort(int[][] array) { for (int i = 0; i ...原创 2019-02-26 20:57:27 · 1670 阅读 · 0 评论 -
会议室
题目描述:给定一系列的会议时间间隔,包括起始和结束时间[[s1,e1],[s2,e2],…(si < ei),确定一个人是否可以参加所有会议。算法思路 :按照区间start从小到大排序,满足题目要求的区间应该是没有交集的。所以要比较看当前区间end是否大于下一个区间start, 并且不同区间start应该不相同。代码实现(Java): /** * Definiti...原创 2019-02-27 09:38:56 · 314 阅读 · 0 评论 -
第一个只出现一次的字符
描述给出一个字符串,找出第一个只出现一次的字符。样例样例 1: 输入: "abaccdeff" 输出: 'b' 解释: 'b' 是第一个出现一次的字符样例 2: 输入: "aabccd" 输出: 'b' 解释: 'b' 是第一个出现一次的字符 代码实现(Java): (使用额外的存储空间)public char firstUniqChar(...原创 2019-02-25 10:53:59 · 142 阅读 · 0 评论 -
翻转字符串里的单词
描述给定一个字符串,逐个翻转字符串中的每个单词。说明单词的构成:无空格字母构成一个单词 输入字符串是否包括前导或者尾随空格?可以包括,但是反转后的字符不能包括 如何处理两个单词间的多个空格?在反转字符串中间空格减少到只含一个样例给出s = "the sky is blue",返回"blue is sky the" 代码实现(Java):public String...原创 2019-02-25 10:27:46 · 153 阅读 · 0 评论 -
翻转二叉树
描述翻转一棵二叉树样例Example 1: Input: {1,3,#} Output: {1,#,3} Explanation: 1 / 3Example 2: Input: {1,2,3,#,#,4} Output: {1,3,2,#,4} Explanation: 1 1 / \ / \...原创 2019-02-28 21:34:51 · 614 阅读 · 0 评论 -
旋转字符串
题目:给定一个字符串和一个偏移量,根据偏移量旋转字符串(从左向右旋转)样例对于字符串 "abcdefg".offset=0 => "abcdefg"offset=1 => "gabcdef"offset=2 => "fgabcde"offset=3 => "efgabcd"解决方案:对于这个问题,换一个角度思考一下。将原创 2019-02-21 20:16:48 · 762 阅读 · 0 评论 -
排序算法--冒泡排序
冒泡排序:冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较相邻的两个元素,如果它们的顺序错误就把它们交换过来时间复杂度以及空间复杂度:时间复杂度(平均):O(n^2)时间复杂度(最坏):O(n^2)时间复杂度(最好):O(n)空间复杂度:O (1)算法描述:比较相邻的元素。如果第一个比第二个大,就交换它们两个; 对每一对相邻元素作同样的工作,从开...原创 2019-02-16 15:18:15 · 143 阅读 · 0 评论 -
排序算法--选择排序
选择排序:选择排序(Selection-sort)是一种简单直观的排序算法。它的工作原理:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。时间复杂度以及空间复杂度:时间复杂度(平均,最好,最坏):O(n^2)空间复杂度:O(1)算法描述:第1趟,在待...原创 2019-02-16 15:40:09 · 153 阅读 · 0 评论 -
给出两个整数a和b, 求他们的和, 但不能使用 + 等数学运算符
给出两个整数a和b, 求他们的和, 但不能使用 + 等数学运算符(原题连接:http://www.lintcode.com/zh-cn/problem/a-b-problem/)。思路:考虑一个普通的加法计算:5+17=22在十进制加法中可以分为如下3步进行: 1. 忽略进位,只做对应各位数字相加,得到12(个位上5+7=12,忽略进位,结果2); 2. 记录进位,上一步...转载 2019-02-21 21:03:59 · 168 阅读 · 0 评论 -
找链表的中点
样例链表1->2->3的中点是2。链表1->2的中点是1。算法思路使用快慢指针实现,慢指针一次移动一个节点,快节点一次移动两个节点,快指针到达终点时,慢指针指向中点代码实现(JAVA)public ListNode middleNode(ListNode head) { // write your code here ...原创 2019-02-27 21:38:46 · 360 阅读 · 0 评论 -
相反的顺序存储
题目描述给出一个链表,并将链表的值以倒序存储到数组中。算法思路使用递归,时间复杂度O(n)代码实现(JAVA)public class Solution { /** * @param head: the given linked list * @return: the array that store the values in reverse o...原创 2019-02-27 21:58:18 · 198 阅读 · 0 评论 -
判断一个字符串中的字符是否唯一
对于ASCII字符:/** * 对于ASCII字符,我们需要256位 * 该算法的时间复杂度为O(n) * @param s * @return */ public static boolean isUnique(String s) { boolean[] a = new boolean[256]; int len = s.length(); for (...原创 2019-02-23 16:31:37 · 566 阅读 · 0 评论 -
删除链表中倒数第n个节点
题目描述给定一个链表,删除链表中倒数第n个节点,返回链表的头节点。样例给出链表1->2->3->4->5->null和 n = 2.删除倒数第二个节点之后,这个链表将变成1->2->3->5->null.算法思路既然只允许遍历一次,且N一直有效,那么可以利用双指针解法(前指针、后指针),让前指针先走N步,再让两个在指针同...原创 2019-02-28 09:38:03 · 109 阅读 · 0 评论 -
删除链表中的第n到m个节点
题目描述给定一个链表,删除链表中的第 n 到 m 个节点,返回链表的头节点。编号从00开始链表的长度不超过100000样例样例 1:输入:head = 1->2->3->4->5->null, n = 1, m = 2输出:1->4->5->null样例 2:输入:head = 1->2->...原创 2019-02-28 11:31:31 · 714 阅读 · 0 评论 -
二叉树的所有路径
题目描述给一棵二叉树,找出从根节点到叶子节点的所有路径。样例例1:输入:1 / \2 3\5输出:[ "1->2->5", "1->3"]算法思路使用递归进行代码实现public List<String> binaryTreePaths(TreeNode root) { ...原创 2019-02-28 21:24:49 · 141 阅读 · 0 评论 -
求二叉树的结点个数
题目描述给出一棵二叉树,返回其节点数。算法思路根据递归函数实现,如果树不为空,根节点为11 统计根节点左子树2 统计根节点右子树3 将左子树节点个数+右子树节点个数+根节点个数1=即为整颗树的节点个数4 统计左右子树的节点个数也是按照1~3的步骤进行5 当树为空时,根节点的个数为0,即为递归函数的出口。代码实现(JAVA)public int getAns...原创 2019-03-07 09:47:10 · 2987 阅读 · 0 评论