随笔分类 - lintcode笔试程序题
50. 数组剔除元素后的乘积
摘要:题目:给定一个整数数组A。 定义B[i] = A[0] * ... * A[i-1] * A[i+1] * ... * A[n-1], 计算B的时候请不要使用除法。 思路: 左右分治,这个效率很高 ,减少了重复计算rightb。result[i] = left[i] * right[i] ,left
阅读全文
46. 主元素
摘要:题目:给定一个整型数组,找出主元素,它在数组中的出现次数严格大于数组元素个数的二分之一。 思路:题目中又说要严格大于数组个数的二分之一,所以先给数组先排序。如果存在的话那数组中间的那个数一定是主元素。所以只需要计算和中间元素相同的个数,然后判断是否大于二分之一就可以了。 public class S
阅读全文
44. 最小子数组
摘要:给定一个整数数组,找到一个具有最小和的子数组。返回其最小和。 方法一: public class Solution { /* * @param nums: a list of integers * @return: A integer indicate the sum of minimum suba
阅读全文
41. 最大子数组
摘要:给定一个整数数组,找到一个具有最大和的子数组,返回其最大和。 思路一要点:1:设置结果result的初始值为无穷小Integer.MIN_VALUE; 2:只需要一层循环就能完成任务 public class Solution { /* * @param nums: A list of intege
阅读全文
13. 字符串查找
摘要:问题:对于一个给定的 source 字符串和一个 target 字符串,你应该在 source 字符串中找出 target 字符串出现的第一个位置(从0开始)。如果不存在,则返回 -1。 字符串查找的算法有不止一种,一般情况下,面试官会只让你写出最简单的朴素算法,而不要求写出效率更高的KMP算法。所
阅读全文
28. 搜索二维矩阵
摘要:写出一个高效的算法来搜索 m × n矩阵中的值。 这个矩阵具有以下特性: 每行中的整数从左到右是排序的。 每行的第一个数大于上一行的最后一个整数。 易错点: 1:二维数组怎么判定为空array.length==0 2:二维数组怎么取它的列数a[0].length,行数a.length 3:while
阅读全文
22. 平面列表
摘要:给定一个列表,该列表中的每个要素要么是个列表,要么是整数。将其变成一个只包含整数的简单列表。 易错点:nestedList.get(i).getInteger(),取集合中的元素时忘记get(i),,就取不到了 扩展:怎么用非递归来解答 思路:比较简单,直接递归调用即可。
阅读全文
14. 二分查找
摘要:给定一个排序的整数数组(升序)和一个要查找的整数target,用O(logn)的时间查找到target第一次出现的下标(从0开始),如果target不存在于数组中,返回-1。 二分查找 算法思想:又叫折半查找,要求待查找的序列有序。每次取中间位置的值与待查关键字比较,如果中间位置的值比待查关键字大,
阅读全文
9. Fizz Buzz 问题
摘要:给你一个整数n. 从 1 到 n 按照下面的规则打印每个数: 如果这个数被3整除,打印fizz. 如果这个数被5整除,打印buzz. 如果这个数能同时被3和5整除,打印fizz buzz. Java.util.Vector提供了向量(Vector)类以实现类似动态数组的功能。在Java语言中是没有指
阅读全文
8. 旋转字符串
摘要:1、题目描述 题目链接:http://www.lintcode.com/zh-cn/problem/rotate-string/ 给定一个字符串和一个偏移量,根据偏移量旋转字符串(从左向右旋转) 2、难点分析 特殊情况:①字符串为""的情况②offset=0的情况③offset远大于字符串长度的情况
阅读全文
6. 合并排序数组:
摘要:题目: 合并两个排序的整数数组A和B变成一个新的数组。 你可以假设A具有足够的空间(A数组的大小大于或等于m+n)去添加B中的元素。 解答: 倒过来进行添加,正着添加可能需要移位,会比较麻烦 class Solution {public:/*** @param A: sorted integer a
阅读全文