题集
老头儿ii
除了代码,还有诗和远方。
展开
-
算法-唯一摩尔斯密码词
题目思路首先将每个单词解析成对应的摩斯密码,然后进行存储。因为每个单词组成的摩斯密码可能相同,所以在进行摩斯密码存储的时候我们可以选择Set,Set的一个性质为元素不重复代码import java.util.TreeSet;class Solution { public int uniqueMorseRepresentations(String[] words) { ...原创 2019-08-19 12:02:17 · 444 阅读 · 0 评论 -
算法-旋转正方形矩阵
题目给定一个整型正方形矩阵matrix,请把该矩阵调整成 顺时针旋转90度的样子。要求额外空间复杂度为O(1)。思路从宏观上来解决这个问题,左上角(a,b),右下角(c,d)两个对角点即可确定这个矩阵。然后将灰色椭圆标记的点按照顺时针或者逆时针交换位置,具体交换类比红色和绿色标记交换完矩阵最外层边框之后,改变左上角(a,b),右下角(c,d)的位置以同样的方式进行交换,当左上角和右下...原创 2019-08-12 09:59:15 · 464 阅读 · 0 评论 -
算法-转圈打印矩阵
题目给定一个整型矩阵matrix,请按照转圈的方式打印它。要求额外空间复杂度为O(1)。例如:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20打印结果为1 2 3 4 5 10 15 20 19 18 17 16 11 6 7 8 9 14 13 12思路题意为从左上角(a,b)开始转圈打印矩阵这道题我们只需要考虑重要的几个边界即...原创 2019-08-12 10:39:35 · 518 阅读 · 0 评论 -
算法-“之”字形打印矩阵
题目给定一个矩阵matrix,按照“之”字形的方式打印这个矩阵,要求额外空间复杂度为O(1)。例如: 1,2,3,4,5,6,7,8,9,10,11,12“之”字形打印的结果为:1,2,5,9,6,3,4,7,10,11,8,12思路基本题意为按照当前图示打印矩阵我们只需要确定对角线的顶点即可,假设对角线左下角为(a,b),右上角为(c,d),从左上角顶点(0,0)开始两个点同时...原创 2019-08-12 11:11:27 · 707 阅读 · 0 评论 -
算法-链表反转
题目分别实现反转单向链表和反转双向链表的函数。要求如果链表长度为N,时间复杂度要求为O(N),额外空间 复杂度要求为O(1)。反转单向链表class Node { int value; Node next; public Node(int value) { this.value = value; }}/** * 反转单向链...原创 2019-08-12 17:41:13 · 242 阅读 · 0 评论 -
算法-在行列都排好序的矩阵中找数
题目给定一个有N*M的整型矩阵matrix和一个整数K, matrix的每一行和每一列都是排好序的。实现一个函数,判断K 是否在matrix中。要求时间复杂度为O(N+M),额外空间复杂度为O(1)。例:0 1 2 5 2 3 4 7 4 4 4 8 5 7 7 9 如果K为7,返回true;如果K为6,返 回false。代码 /** * 查找 * ...原创 2019-08-12 18:16:20 · 229 阅读 · 0 评论 -
算法-打印两个有序链表的公共部分
题目给定两个有序链表的头指针head1和head2,打印两个 链表的公共部分。代码class Node { int value; Node next; public Node(int value) { this.value = value; }} /** * 打印两个有序链表的公共部分 * * @...原创 2019-08-12 18:31:16 · 205 阅读 · 0 评论 -
算法-区域和检索
题目一:数组不可变代码class NumArray { private int[] arr; public NumArray(int[] nums) { arr = new int[nums.length + 1]; for(int i = 0; i < nums.length; i++) { arr[...原创 2019-08-21 12:36:20 · 528 阅读 · 0 评论 -
算法-前 K 个高频元素
题目思路首先通过一个Map来存储不同数值对应的频次,然后根据优先队列的性质(最小堆),定义优先级比较方式,这里定义频次低的优先级高。通过遍历Map中的键控制优先队列中值的数量即可。代码import java.util.*;class Solution { public List<Integer> topKFrequent(int[] nums, int k) ...原创 2019-08-19 22:12:21 · 421 阅读 · 0 评论 -
算法-两个数组的交集 II
题目思路相比于上一个题目 算法-两个数组的交集 本题目需要输出所有重复的数字,可以通过Map这种数据结构,首先遍历数组1中的元素,Map的Key为数组的值,Value为数组当前值出现的频次,然后遍历数组2中的元素即可代码import java.util.TreeMap;class Solution { public int[] intersect(int[] nums1,...原创 2019-08-19 16:54:37 · 184 阅读 · 0 评论 -
算法-两个数组的交集
题目思路因为输出结果中每个元素是唯一的,即不包含重复元素,所以可以选择Set这种数据结构。首先遍历将数组1中的所有元素添加至Set中,此时Set中的元素全部唯一。然后遍历数组2,判断在Set中是否包含此子元素,如果存在则添加至定义好的ArrayList中,又因为数组2中可能还存在该重复元素,所以添加完之后从Set删除此元素,最后将ArrayList转换成数组返回即可代码import ...原创 2019-08-19 16:36:58 · 622 阅读 · 0 评论 -
算法-判断一个链表是否为回文结构
题目给定一个链表的头节点head,请判断该链表是否为回文结构。例如: 1->2->1,返回true。 1->2->2->1,返回true。 15->6->15,返回true。 1->2->3,返回false。进阶: 如果链表长度为N,时间复杂度达到O(N),额外空间复杂度达到O(1)。方法一运用一个栈结构,遍历整个链表,将每一个...原创 2019-08-12 23:40:56 · 532 阅读 · 0 评论