12 2015 档案
摘要:函数将字符串中的字符'*'移到串的前部分,前面的非'*'字符后移,但不能改变非'*'字符的先后顺序,函数返回串中字符'*'的数量。如原始串为:ab**cd**e*12,处理后为*****abcde12,函数并返回值为5。(要求使用尽量少的时间和辅助空间)思路:类似于快速排序,用两个指针分别指向字符数...
阅读全文
摘要:根据一个有序数组,构造一颗二叉搜索树思路:因为数组有序,所以数组中间节点是该二叉树的根节点,因为二叉树的定义是右子树都大于根节点,左子树都小于根节点,构造完根节点后,分别截取数组的前半段和后半段分别递归构造左子树和右子树 1 package com.rui.microsoft; 2 3 publi...
阅读全文
摘要:12个高矮不同的人,排成两排,每排必须是从矮到高排列,而且第二排比对应的第一排的人高,问排列方式有多少种? (Java版)思路: 从网上看了半天人家的分析,终于看明白了,在这里记录一下自己的思路先用一组数来代表这12个人, 1,2,3,4,5,6 7,8,9,10,11,12 排成两排,每排要递增排...
阅读全文
摘要:问题:求一个字符串中的最长回文子串 (java实现)比如字符串google, 它的最长回文子串是goog思路: 网上有时间复杂度是o(n)的解法,我的思路是是否可以利用以前学到的最长公共子串的解法,因为对于一个含有回文子串的字符串,其颠倒后的字符串必然也含有相同的回文子串,想到这一点,这个问题就变成...
阅读全文
摘要:69.求旋转数组中的最小元素。题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个排好序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3, 4, 5, 1, 2}为{1, 2, 3, 4, 5}的一个旋转,该数组的最小值为1思路: 1. 可以从左到右扫描整个数组,找...
阅读全文
摘要:68.把数组排成最小的数。题目:输入一个正整数数组,将它们连接起来排成一个数,输出能排出的所有数字中最小的一个。例如输入数组{32, 321},则输出这两个能排成的最小数字32132。请给出解决问题的算法,并证明该算法 1 package com.rui.microsoft; 2 3 import...
阅读全文
摘要:66.颠倒栈。题目:用递归颠倒一个栈。例如输入栈{1, 2, 3, 4, 5},1 在栈顶。颠倒之后的栈为{5, 4, 3, 2, 1},5 处在栈顶。思路: 首先想到的是再创建一个新栈,用来接收旧栈的数据,但这样空间复杂度是o(n),可不可以用原有的栈完成颠倒的操作呢?假设栈里只有两个元素1,2,...
阅读全文
摘要:63.在字符串中删除特定的字符。题目:输入两个字符串,从第一字符串中删除第二个字符串中所有的字符。例如,输入”They are students.”和”aeiou”, 则删除之后的第一个字符串变成”Thy r stdnts.”。思路:1. 位图法 将两个字符串分别转换成bitmap 然后对他们做异或...
阅读全文
摘要:62.找出链表的第一个公共结点。题目:两个单向链表,找出它们的第一个公共结点思路:1.暴力法 但时间复杂度太高 o(n*m)2.如果两个链表有公共节点,则从该公共节点起,后面的节点均为公共的,即这两个链表在第一个公共节点交叉,然后形成一个Y字型,因为两个链表长度不一定一样,所以可以先求得他们的长度n...
阅读全文
摘要:题目:输入一个链表的头结点,从尾到头反过来输出每个结点的值以前做过相似的,可以用递归解决,也可以用非递归解决 1 package com.rui.microsoft; 2 3 import java.util.Stack; 4 5 public class Test_LinkedLis...
阅读全文
摘要:求一个一维数组中的最长递增子序列的长度比如,在序列{1, -1, 2, -3, 4, -5, 6, -7}中,其最长的递增子序列为1,2,4,6思路: 编程之美上的题,也是蛮经典的动态规划题。 思路还是去找规律,我们拿LCS来表示最长递增子序列的长度第一个数1, 则LCS(1)=1, 因为就一个数嘛...
阅读全文

浙公网安备 33010602011771号