随笔分类 - 算法
摘要:题目: 有N个长度不一的数组,所有的数组都是有序的,请从大到小打印这N个数组整体最大的前K个数。 例如: 输入含有N行元素的二维数组代表N个一维数组。 219,405,538,845,971 148,558 52,99,348,691 再输入整数K=5,则打印: Top 5:971,845,961,558,538。 要求: 1.如果所有数组的元素个数小于K,则从小到大打印所有的数。 2.时间复杂度...
        阅读全文
                
摘要:题目: 给定一个double类型的数组arr,其中的元素可正、可负、可为0。返回子数组累乘的最大乘积。 思路: 假设以arr[i-1]结尾的数组最小累乘积为min,最大累乘积为max,那么以arr[i]结尾的数组的最大累乘积可能有三种情况。 max*arr[i];如:[3,4,5]算到5时。 min*arr[i];如:[-3,4,-5]算到-5时。 arr[i];如:[0.3,0.4,5]算...
        阅读全文
                
摘要:题目: 定义局部最小的概念。arr长度为1时,arr[0]是局部最小。arr的长度为N(N>1)时,如果arr[0] arr[mid - 1]) { right = mid - 1; } else if (arr[mid] > arr[mid + 1]) { left = mid + 1; } else { return mid; } } retu...
        阅读全文
                
摘要:一、子数组的最大累加和问题 题目: 给定一个数组,返回子数组的最大累加和。 例如:arr=[1,-2,3,5,-2,6,-1],所有子数组中,[3,5,-2,6]可以累加出最大的和12,return 12. 要求: 时间复杂度为O(N),额外空间复杂度为O(1)。 思路: 如果arr中没有正数,产生
        阅读全文
                
摘要:题目: 给定一个长度不小于2的数组arr,实现一个函数调整arr,要么使所有的偶数下标都是偶数,要么使所有的奇数下标都是奇数。 要求:时间复杂度为O(N),额外空间复杂度为O(1)。 程序:	public static void modify(int[] arr) { if (arr == null || arr.length < 2) { return; } int even ...
        阅读全文
                
摘要:题目: 给定一个长度为N的整型数组arr,其中有N个互不相等的自然数1~N,请实现arr的排序,但是不要把下标0~N-1位置上的数值通过直接赋值的方式替换成1~N。 要求:时间复杂度为O(N),额外空间复杂度为O(1)。 思路: 1.从左向右遍历arr,假设当前遍历到i位置。 2.if arr[i]==i+1,不需要调整,继续遍历。 3.if arr[i]!=i+1,进行调整。 根据调整功能的方法...
        阅读全文
                
摘要:一、未排序正数数组中累加和为给定值的最长子数组长度 题目: 给定一个数组arr,该数组无序,但每个数都是正数,再给定一个正数K。求arr的所有子数组中所有元素相加和为K的最长子数组长度。 例如: arr=[1,2,1,1,1],K=3, 累加和为3的最长子数组为[1,1,1],return 3。 程序:public static int getMaxLength(int[] arr, int k)...
        阅读全文
                
摘要:一、Two Sum Given an array of integers, find two numbers such that they add up to a specific target number. The function twoSum should return indices of the two numbers such that they add up to the tar...
        阅读全文
                
摘要:题目: 如果一个数组再排序之后,每相邻两个数差的绝对值都为1,则该数组为可整合数组。例如,[5,3,4,6,2]排序之后为[2,3,4,5,6],符合每相邻两个数差的绝对值为1,所以这个数组为可整合数组。 给定一个整型数组,请返回其中最大可整合子数组的长度。例如,[5,5,3,2,6,4,3]的最大
        阅读全文
                
摘要:题目: 给定一个有N*M的整型矩阵matrix和一个整数K,matrix的每一行和每一列都是排好序的。实现一个函数,判断K是否在matrix中。 例如: 0 1 2 5 2 3 4 7 4 4 4 8 5 7 7 9 如果K为7,返回true;如果K为6,返回false。 要求时间复杂度为O(N+M
        阅读全文
                
摘要:题目: 1.给定一个整型数组,打印其中出现次数大于一半的数。如果没有出现这样的数,打印提示信息。 如:1,2,1输出1。 1,2,3输出no such number。 2.给定一个整型数组,再给一个整数K,打印所有出现次数大于N/K的数,如果没有这样的数,打印提示信息。 解答: 两道题都可以使用哈希
        阅读全文
                
摘要:题目: 给定一个无序数组,求出需要排序的最短子数组的长度。 例如:arr={1,5,3,4,2,6,7}返回4,因为只有[5,3,4,2]需要排序。 思路: 解决这个问题可以在时间复杂度为O(N)、额外空间复杂度为O(1)完成。 初始化变量noMinIndex=-1,从右向左遍历,便利的过程记录右侧出现过的数的最小值,记为min。假设当前数为arr[i],如果arr[i]>min,说明如果要整体有...
        阅读全文
                
摘要:题目: 给定一个无序的整型数组arr,找到其中最小的k个数。 方法一: 将数组排序,排序后的数组的前k个数就是最小的k个数。 时间复杂度:O(nlogn) 方法二: 时间复杂度:O(nlogk) 维护一个有k个数的大根堆,这个堆代表目前选出的k个最小的数。在堆的k个元素中堆顶元素是最小的k个数中最大
        阅读全文
                
摘要:题目: 给定一个矩阵matrix,按照“之”字形的方式打印这个矩阵。例如: 1 2 3 4 5 6 7 8 9 10 11 12 “之”字形打印的结果为:1,2,5,9,6,3,4,7,10,11,8,12 要求额外的空间复杂度为O(1)。 思路: 1.上坐标(tR,tC)的初始为(0,0),先沿着
        阅读全文
                
摘要:题目一: Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral order. For example,Given the following matrix: 
        阅读全文
                
摘要:题目: 给定32位整数a和b,可正、可负、可0,不能使用算术运算符,可分别实现a和b的加减乘除运算。 加法运算: 无进位相加: a: 001010101 b: 000101111 a^b 001111010 只考虑进位: a 001010101 b 000101111 (a&b)<<1 000001
        阅读全文
                
摘要:题目一: 给定一个整形数组arr和一个大于1的整数k。已知arr中只有1个数出现了奇数次,其他的数都出现了偶数次,请返回出现了奇数次的数。 时间复杂度为O(N),额外空间复杂度为O(1)。 思路: 整数n与0异或的结果是n,整数n与整数n异或的结果是0.所以先申请一个整形变量,记为eO。把eO和每个
        阅读全文
                
摘要:一、不用额外变量交换两个整数的值 a=a^b; b=a^b; a=a^b; 或者: a=a+b; b=a-b; a=a-b; 二、不用任何比较判断找出两个数中较大的数 有两种方法,方法一有一定的局限性,a-b的值可能溢出,这样溢出后符号改变,返回结果就不正确。 而方法二对a和b是否异号进行了判断,如
        阅读全文
                
摘要:题目一:32位无符号整数的范围是0-2^32-1即0-4294967295,现在有一个正好包含40亿个无符号整数的文件,所以在整个范围中必然有没出现的数。可以使用最多1GB的内存。1.怎么知道所有没有出现过的数?哈希表需要占用很多空间,可以使用bit map的方式来表示数出现的情况。具体地说,是申请...
        阅读全文
                
摘要:一、只用2GB内存在20亿个整数(32位)中找到出现次数最多的数解题思路:想要在很多整数中找到出现次数最多的数,通常的做法是使用哈希表对出现的每一个数做词频统计,哈希表的key是某一个整数,value是这个数出现的次数。就本题来说,一共有20亿个数,哪怕只是一个数出现了20亿次,用32位的整数也可以...
        阅读全文
                
 
                    
                     
                    
                 
                    
                
 
         浙公网安备 33010602011771号
浙公网安备 33010602011771号