面试(java)
LandscapeMi
这个作者很懒,什么都没留下…
展开
-
面试:数组:矩阵清零
题目给定一个矩阵,若某元素为0,则将该元素的行和列清零算法找到第一个0元素,使用该元素的行来记录需要清零的列,该元素的列记录需要清零的行 再扫描,一次清零原创 2016-05-20 16:26:46 · 467 阅读 · 0 评论 -
面试:数组:旋转矩阵
题目给第一个m*n的矩阵,按螺旋顺序返回所有元素算法越界的判断方法import java.util.*;public class Solution{ public ArrayList<Integer> spiralOrder(int[][] matrix){ ArrayList<Integer> result=new ArrayList<Integer>();原创 2016-05-20 16:36:16 · 506 阅读 · 0 评论 -
面试:字符串:字符串判重
题目输入字符串,判断是否有重复字符算法256个字符布尔数组记录每个字符的情况遍历import java.util.*;public class Solution{ public boolean isUniqueChars(String str){ boolean[] char_set=new boolean[256]; for(int i=0;i<str原创 2016-06-02 16:44:08 · 510 阅读 · 0 评论 -
面试:字符串:字符串判重
题目输入字符串,判断是否有重复字符算法256个字符布尔数组记录每个字符的情况遍历import java.util.*;public class Solution{ public boolean isUniqueChars(String str){ boolean[] char_set=new boolean[256]; for(int i=0;i<str原创 2016-06-02 16:44:37 · 778 阅读 · 0 评论 -
面试:字符串:产生括号
题目打印出所有N对合理的括号组合 例如: N=3; ()()(),()(()),(())(),((()))算法http://www.shangxueba.com/jingyan/1837405.html * 任意位置满足左括号大于等于右括号 * 我们用二叉树形象的表示这种关系。然后再把二叉树转化为代码的形式。因为二叉树的定义就是递归定义的,因此本题很明显应该使用递归的形式。最后五条画黑线的原创 2016-06-02 19:16:35 · 316 阅读 · 0 评论 -
面试:字符串: 字符串转换为10进制数
题目实现atoi函数,将字符串转为十进制数 算法照着要求写代码,可以总结如下: 1. 字串为空或者全是空格,返回0; 2. 字串的前缀空格需要忽略掉; 3. 忽略掉前缀空格后,遇到的第一个字符,如果是‘+’或‘-’号,继续往后读;如果是数字,则开始处理数字;如果不是前面的2种,返回0; 4. 处理数字的过程中,如果之后的字符非数字,就停止转换,返回当前值; 5. 在上述处理过程中原创 2016-06-09 19:04:12 · 725 阅读 · 0 评论 -
面试:字符串: 提取IP地址
题目给定一个只含数字的字符串,返回所有合法的ip地址原创 2016-06-09 19:45:58 · 5150 阅读 · 2 评论 -
面试:字符串: 正则匹配
题目是否正则匹配,”.” 匹配任意字符和 “*”匹配0个或多个前一个字符 isMatch(“a”,”a”)=true isMatch(“a*”,”aa”)=true isMatch(“ab”,”.*”)=true isMatch(“ab”,”a*bc*”)=trune算法如果已经完成遍历p,则要求s也被遍历完成如果pi的下一个字符不是*,则匹配pi和si的当前字符,如果匹配成功,则递归调原创 2016-06-09 20:12:08 · 410 阅读 · 0 评论 -
面试:哈希:最长连续子串
题目给出一个无序的整形数组,找出最长连续子串的长度。线性时间复杂度{8,1,9,3,2,4}———-连续子串—–{1,2,3,4}—-长度是4算法记录数字和其所在的连续数组的长度插入数字判断其前一个数和后一个数,是否在hash里如果存在,更新连续数组长度O(n)import java.util.*;class Solution{ public int findLongestCons原创 2016-06-10 16:09:32 · 563 阅读 · 0 评论 -
面试:哈希:最长不同字符
题目输入一个字符串,求不含重复字母的最长子串的长度import java.util.*;class Solution{ public int lengthOfLongestSubstring(String s){ int n=s.length(), start=0, maxlen=0; //hash记录字符最新出现的位置 HashMap<Cha原创 2016-06-11 18:26:45 · 214 阅读 · 0 评论 -
面试:哈希:常数时间
数组和哈希的结合 * 数组A保存元素; * HM的key存储数组元素,值为元素在数组的下标原创 2016-06-11 18:30:38 · 298 阅读 · 0 评论 -
面试:字符串:产生括号
题目根据字典,从一个抹去空格字符串里提取全部单词组合,并拼接成完整的句子 例如: thisisanexample this is an example算法从找第一个单词递归利用哈希记录以及做好的分词(加速)public class Solution{ public ArrayList<String> tokenizeString(String input, HashSet<Str原创 2016-06-06 17:31:39 · 261 阅读 · 0 评论 -
面试:字符串: 提取单词(2)
题目根据字典,从一个抹去空格的字符串里提取全部的单词组合,求单词组合里最大单词个数算法一般求最大数量而不求具体方案,DPdp记录中间状态,dp[i]代表从0到i的子串包含的最大数量,程序最后返回dp[n-1], n为字符串的长度,dp计算的等式为dp[j]=max(dp[j],dp[i]+1),从第i+1到第j个字符组成的字符串是一个单词public class Solution{原创 2016-06-06 17:44:04 · 1006 阅读 · 0 评论 -
面试:字符串: 字符交替
题目给定两个字符串,大于出所有由这两字符交替组成的字符串。 要求维持原来字符的顺序不变算法例如:输入“AB”和“CD”,则打印 ABCD ACBD ACDB CABD CADB CDAB (1) s1和s2均无字符可用,则返回空串 (2) 其中一个空字符可用,s1剩余字符为空,那么把s2的剩余字符附在已经得到的字符串的后面,输出 (3)其他,或者从s1取字符,或者从s2取字符,保原创 2016-06-06 17:57:47 · 573 阅读 · 0 评论 -
面试:字符串: 字符串相乘
题目给出两个字符串的正整数,求其乘积,返回其乘积的字符串的表示算法num1*num2(N*M)的结果最多是N+M位 先乘,再累加public class Solution{ public String multiply(String num1, String num2){ int len1=num1.length(), len2=num2.length();原创 2016-06-06 18:33:44 · 2775 阅读 · 0 评论 -
面试:哈希:最长不同字符子串
题目输入一个字符串,求不含有重复字母的最长子串的长度 “aaaa” a 长度1算法hash记录字母和该字母出现的次数记录字母出现的位置import java.util.*;class Solution{ public int lengthOfLongestSubstring(String s){ int n=s.length(), start=0, maxlen原创 2016-06-10 21:20:50 · 223 阅读 · 0 评论 -
面试:数组:区间搜索
题目给定一个区间和目标值,找出目标值的起始下标,若无目标值,则返回[-1,-1] 要求时间复杂度是O(lgn)算法找到比目标值小的最大值,下一步是目标值找到比目标值大的最小值,上一步是目标值import java.util.*;public class Solution{ public int[] searchRange(int[] A,int target){ in原创 2016-05-19 17:30:14 · 244 阅读 · 0 评论 -
面试:数组:插入位置
题目给定一个有序数组和一个目标值,返回目标值的下标。如果目标值不在序列则返回其插入数组后的下标值,插入后的数组依然保持有序。 数组不存在重复的数字算法二分查找的最后结果是low>high的时候循环结束,low记录了第一个大于目标值的元素的下标import java.util.*;public class Solution{ public int searchInsert(int[] A,i原创 2016-05-19 18:18:43 · 216 阅读 · 0 评论 -
面试:数组:二维搜索数组
题目对一个n*n矩阵进行搜索,矩阵有如下特征 1. 每行的是从左到右都是排序的 2. 每行的首数大于尾数二分查找A是m*n的矩阵A[k]=matrix[i][j]i=k/nj=k%n复杂度O(lg(m*n))import java.util.*;public class Solution{ public boolean searchMatrix(int[][] matrix,i原创 2016-05-19 17:15:17 · 234 阅读 · 0 评论 -
面试:数组:twosum
twosum双指针复杂度=O(n+nlogn+n+n) = O(nlogn)。//HelloDate.javaimport java.util.*;public class MyDemo{ public static boolean hassum(int[] A,int target){ boolean res=false; if(A==nul原创 2016-04-04 13:24:35 · 375 阅读 · 0 评论 -
面试_java:数组:旋转数组:rotate array(189)
{1,2,3,4,5};k=2旋转 第一次:5,4,3,2,1 第二次:4,5,3,2,1 第三次:4,5,1,2,3复杂度:O(N)//HelloDate.javaimport java.util.*;public class MyDemo{ public int[] rotateK(int[] A,int k){ if(A==null)原创 2016-04-05 23:29:00 · 560 阅读 · 0 评论 -
面试:数组:最大下标距离
给定一个整形数组,找出最大下标距离j−ij-i, 当且A[i]<A[j]和i<jA[i]<A[j]和i<j复杂度:三次扫描,每次的复杂度O(N)O(N)算法:{5,3,4,0,1,4,1}找出从第一个元素开始的下降序列{5,3,0}i=3,j=6, j从尾部扫描初始化,i=3, j=6, A[i]=0//HelloDate.javaimport java.util.*;public cl原创 2016-04-07 00:02:08 · 901 阅读 · 0 评论 -
面试:数组:重叠区间个数
array.sort排序 java中Arrays.sort使用了两种排序方法,快速排序和优化的合并排序。 快速排序主要是对哪些基本类型数据(int,short,long等)排序, 而合并排序用于对对象类型进行排序。 使用不同类型的排序算法主要是由于快速排序是不稳定的,而合并排序是稳定的。这里的稳定是指比较相等的数据在排序之后仍然按照排序之前的前后顺序排列。对于基本数据类型,稳定性没有意义,而对原创 2016-04-08 00:07:24 · 3173 阅读 · 1 评论 -
面试:数组:插入区间:057
///* * [输入] * 不重叠的而且拍好序的区间[1,5] ; [6,10] * 现插入一个新的区间: [4,6] * * [输出] * [1,10] * * 【算法】 *1. 找出与插入区间重叠的区间,然后合并 *2. 非重叠区间直接加入结果集合 */import java.util.*;class Interval{ int start; //起点原创 2016-04-17 18:20:57 · 265 阅读 · 0 评论 -
面试:数组:合并区间:058
///* * 合并区间 */import java.util.*;class Interval{ int start; //起点 int end; //终点 Interval(int a, int b){ start=a; end=b; }}public class MyDemo{ public ArrayList原创 2016-04-24 16:35:41 · 383 阅读 · 0 评论 -
面试:数组:数组配对
给定N个整数,N为偶数,是否可以找到N/2对,使得每对和能被k整除。(每个元素只能出现在一个配对中)算法生成A[k]数组,大小是k,A[i]记录余数是i的元素的个数。被k整除的个数是否是偶数,若是奇数,false;k是偶数,k/2是否 是偶数余数i和余数k-i的个数是否相等import java.util.*;public class Solution { public boolea原创 2016-05-02 21:11:29 · 870 阅读 · 0 评论 -
面试:数组:Topk _1
题目 求一维数组中最小的k个数字 算法_1:快排算法 复杂度:O(klgn)import java.util.*;class Solution{ //选择一个数,将数组分为大小两个部分 public int partition(int data[],int start,int end){ int pivotvalue=data[start];原创 2016-05-14 23:50:28 · 852 阅读 · 0 评论 -
面试:数组:两数组中的中序数
题目给定一维整形数组和一个整数看,找出不小于k的数目最小的子数组算法parttion,数组一份为二,转换为topk需要对partition做降序排列分区的同时计算左边数的和这里写代码片原创 2016-05-15 16:05:30 · 334 阅读 · 0 评论 -
面试:数组:旋转数组的最小值
题目输入一个递增排序数列的一个旋转,输出旋转数组的最小值算法:局部有序二分查找特殊情况 {1,1,1,0,0,1,1} 无法区分哪个部分已经排序,只能把首部指针向前移动一位。复杂度o(lgN)import java.util.*;class Solution{ public int getMinOfRotation(int[] A){ int left=0,rig原创 2016-05-15 16:23:00 · 214 阅读 · 0 评论 -
面试:数组:旋转数组搜索
题目给定一个有序数组的旋转和一个目标值,返回其目标值在该数组的下标。如果不存在,那么返回-1。假设数组没有重复的值。算法二份查找 O(lgN)import java.util.*;class Solution{ public int searchRotateArray(int[] A,int target){ int left=0; int right=A.原创 2016-05-15 16:30:57 · 358 阅读 · 0 评论 -
面试:数组: 首个正数
题目给定一个无序的整型数组,找出第一个不在数组里的正整数。要求时间复杂度是 O (n),空间复杂度是O(1)例子 输入数组{5,3,-1,1} 返回 2 算法借助哈希思想数组小标存储相应的值: A[K-1]=K对于大于数组长度和小于1的数字抛弃;有了新数组就从头开始,遇到第一个A[k-1] 不等于k的,则输出k如果没有遇到只能是数组长度的下一个整数 {1,2,3,4} ;则返回原创 2016-05-15 17:07:57 · 242 阅读 · 0 评论 -
面试:数组:合并有序数组
题目给定两个有序数组A和B,把B合并到A,保持结果有序。假设A有足够的空间可以容纳B,初始时,A和B的元素各有m和n个。算法反向插入和移动数组import java.util.*;class Solution{ public void mergeTwoMergeSortedArrays(int[] A,int m,int[] B,int n){ while(n>0){原创 2016-05-15 17:14:48 · 204 阅读 · 0 评论 -
面试:数组:产生随机数
给一个整数数组,以及min和max,写一个函数产生一个在[min, max] 之间的随机数。该随机数不再数组内部。import java.util.*;public class Solution { public void numInRange(int[] intList,int min,int max){ Arrays.sort(intList); //对输入数据排序原创 2016-05-05 16:24:35 · 338 阅读 · 0 评论 -
面试:数组:三角形
题目给定一个正整数n, 产生Pascal三角形的前n行算法每行首位是1中间元素是上一行相邻两个元素的和。import java.util.*;public class Solution{ public ArrayList<ArrayList<Integer> > pascalTriangle(int n){ ArrayList<ArrayList<Integer> >原创 2016-05-18 17:12:07 · 632 阅读 · 0 评论 -
复习(java):语法:java基础库
1.数组初始化// 静态初始化int[] intArr=new int[]{5,6,7,8};//动态初始化int p = new int[5];foreachfor(String book:books)数组内存数组是引用变量引用变量的初始化基本类型的初始化(p94)引用变量数组的初始化(p95)多纬数组Arraysp95原创 2016-07-07 11:25:41 · 303 阅读 · 0 评论