![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
剑指offer
悦然lily
生命不息,奋斗不止
展开
-
第一个只出现一次的字符
题目: 在一个字符串(1 位置索引从0开始//直观的思路:从头开始扫描这个字符串的每一个字符。当访问到某个字符时,拿这个字符和后面的每一个字符比较,如果在后面没有发现重复的字符,则该字符是只出现依次的字符。 时间复杂度是O(n方)。另一种思路:用一个容器存放字符出现的次数。哈希表。HashMap 键值对 一个存放字符,一个存放次数。 扫描两遍。 时间复杂度O(n),空间复杂度原创 2016-04-20 19:01:31 · 243 阅读 · 1 评论 -
把数组排成最小的数
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。 * 例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。 * 直观的思路:求出数组中所有数字的全排列,然后把每个排列拼起来,最后求出拼起来数字的最小值。 n个数字有n!种排列。复杂度高 * 给出两个数字a和b,我们需要确定一个规则,判断a和b哪个排在前面,而不仅转载 2016-04-20 16:39:04 · 215 阅读 · 0 评论 -
数组的旋转
/*把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减序列的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 * 思路:直观解法 ,从头到尾遍历,找最小值 O(n). * 第二种思路:旋转后的数字实际可以划分成两个排序的子数组。而且前面的子数组的元素大于等于后面子数组的元素。并且最小的元原创 2016-04-22 15:14:21 · 314 阅读 · 1 评论 -
二叉搜索树的最短路径,从根节点到叶子节点
public int minPathSum(TreeNode root) { if(root==null) return -1; return getLength(root,0); }private int getLength(TreeNode root, int curLen) { int minLeft=-1; int minRight=-1;转载 2016-08-02 21:14:38 · 780 阅读 · 0 评论