自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(36)
  • 收藏
  • 关注

原创 题解|Nim阶梯博弈

Nim阶梯博弈题目描述Georgia and Bob decide to play a self-invented game. They draw a row of grids on paper, number the grids from left to right by 1, 2, 3, …, and place N chessmen on different grids, as show...

2019-01-30 22:45:21 179

原创 特殊排序|自定义比较规则

特殊排序题目描述设计一个函数打印出整型数组全部数字的最小组合数。例如数组{3,32,321},打印这3个数字的最小组合数,321323基于冒泡排序的自定义比较规则源代码import java.util.Scanner;public class 特殊排序 { /* * 输入数组{3,32,321},打印这3个数字的最小组合数,321323 */ public static ...

2019-01-30 22:37:54 235

原创 题解|大数据下的TopK

topK思路面对海量数据,维持K个容量的小顶堆用户输入的数据与堆顶比较,大于堆顶的数据才能替换堆顶元素每当有新数据替换堆顶元素时,调整以堆顶为根的小顶堆源码import java.util.Arrays;import java.util.Scanner;public class topK { public static void main(String[] args) {...

2019-01-29 17:29:12 176

原创 题解|需要排序的子数组长度(锯齿形数组)

需要排序的子数组题目描述给定一个无序数组arr,求出需要排序的最短子数组长度如输入:arr = {2,3,7,5,4,6},返回4,因为只有{7,5,4,6}需要排序思路确定数组最大值位置,从该位置向右扫描寻找是否有小于最大值的元素,若有则扩大需要排序区间的右端。确定数组最小值位置,从该位置向左扫描寻找是否有大于最小值的元素,若有则扩大需要排序区间的左端。得出左右端点即可计算长度...

2019-01-29 15:48:06 655 3

原创 题解|排序数组中寻找和的因子

排序数组中寻找和的因子题目描述给定已排序数组arr和k,不重复打印arr中所有相加和为k的不降序二元组如输入arr={-8,-4,-3,0,2,4,5,8,9,10};k=10;输出(0,10)(2,8)思路1:遍历数组每个元素,用二分查找寻找k-arr[i]思路2:双指针逼近法下面提供思路2的源代码public class 排序数组中找和的因子_02 { public s...

2019-01-29 14:51:40 368

原创 题解|贪心算法快速过桥

快速过桥UVA-10037[问题描述]n个人的队伍想在晚上通过一座大桥。任何时间最多有2人通过,每组必须有一个手电筒。很可怜,这n个人只有一个手电筒可用,因此必须合理地安排,让手电筒能回到另一端,这样才能让更多人通过大桥。每个人有不同的速度,编组后,一个组的速度等于慢的那个人的速度。你的任务是实现一种策略,让所有人在最短时间内通过。[输入]第一行是一个单独的数字,代表测试案例的个...

2019-01-28 17:44:23 1440

原创 题解|Stacks of Flapjacks

Stacks of FlapjacksUVA-120[问题描述]堆栈和队列通常被认为是数据结构的面包和黄油,可用于体系结构、解析,操作系统和离散事件模拟。堆栈在形式语言理论中也很重要。现在的问题涉及黄油和煎饼(而不是面包),同时还有一个根据唯一但完整的规则来翻煎饼的服务器。给你一栈的煎饼,请你编写一个程序用于指示这个栈如何被排序以使得最大的煎饼在最下面而最小的煎饼在最上面。煎饼的直径将...

2019-01-27 15:24:01 446

原创 题解|高斯的生日

高斯的生日[问题描述]大数学家高斯有个好习惯:无论如何都要记日记。他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如:4210后来人们知道,那个整数就是日期,它表示那一天是高斯出生后的第几天。这或许也是个好习惯,它时时刻刻提醒着主人:日子又过去一天,还有多少时光可以用于浪费呢?高斯出生于:1777年4月30日。在高斯发现的一个重要定理的日记上标注着:5343,因此可...

2019-01-26 23:19:54 1573

原创 基数排序

基数排序import java.util.ArrayList;/* * 桶排序的变种 * 下列的桶排序不包含排序负数的功能 * 根据数组中最大数字的位数K进行K次的入桶和分配操作 */public class RadixSort { public static void main(String[] args) { // TODO Auto-generated method ...

2019-01-26 16:03:30 152

原创 计数排序

计数排序思路元素转下标下标转元素下面的源代码不包含对非负数排序的功能/* * 非常快,但是有可能浪费大量空间 */public class 计数排序 { public static void main(String[] args) { // TODO Auto-generated method stub int[] arr = { 0, 16, 4, 10, 14,...

2019-01-25 20:20:32 109

原创 堆排序|以小顶堆实现升序排序

以小顶堆实现升序排序思路堆化创建辅助空间,并将原数组拷贝给辅助空间在辅助空间上,将根节点元素与数组最后一个元素位置交换,在原数组上记录此时的最后一个元素。在辅助空间上调整数组,但规模(n)减1。如此循环直到n=3// 升序堆排序 public static void minHeapUpSort(int[] arr, int i, int n) { makeMinHeap(a...

2019-01-25 19:40:24 603

原创 堆排序|minHeapFixDown的递归和迭代形式

minHeapFixDown的递归和迭代形式// 把以i为根节点的二叉堆调整成小顶堆 public static void minHeapFixDown(int[] arr, int i, int n) { // 找到左右孩子 int left = 2 * i + 1; int right = 2 * i + 1; // 找到左右孩子中的最小孩子 // 左孩子越界,右孩子必...

2019-01-25 00:14:44 682

原创 一题三解|最小可用ID

最小可用ID描述在非负数组(乱序)中找到最小的可分配的id(从1开始编号),数据量1000000。例如(3,2,1,5,8,6)中,最小可用ID为4。解法1将乱序数组排序之后,对数组中的数字进行位置确认。即第x个数字要在x - 1的索引上。复杂度O(nlgn)private static int f(int[] arr) { Arrays.sort(arr); int res ...

2019-01-22 14:59:37 477 1

原创 题解|超过数组长度一半的数字

超过数组长度一半的数字描述数组中有一个数字的出现次数超过了该数组长度的一半,找出这个数字。思路排序后返回arr[arr.length/2]。排序后扫描。超过数组长度一半的数字,其次数累加和一定大于其余数字的累加和。所以可以直接遍历数组,保存当前数字和出现次数,相同数字count++否则count- -,若count = 0则重置当前数字和出现次数。遍历完成后,返回保存的数字。pu...

2019-01-22 11:29:43 209

原创 归并排序|递归与非递归形式

归并排序取中间值,将数组分为左右两部分。对左右两部分,分别进行排序。借助辅助数组,合并两部分。public class MegerSort { public static void main(String[] args) { // TODO Auto-generated method stub int[] arr = { 11, 2, 5, 8, 7, 6, 3, 9 };...

2019-01-21 20:37:17 133

原创 题解|奇数在左偶数在右之快排的双指针思想

奇数在左偶数在右思路:快排的双指针思想public class 奇数在左偶数在右 { public static void main(String[] args) { // TODO Auto-generated method stub int[] arr = { 2, 3, 6, 8, 1, 12, 10, 7, 5, 4, 9 }; f(arr); for (int n...

2019-01-20 15:13:09 285

原创 题解|高效率求出乱序数组中的第k小元素

高效率求出乱序数组中的第k小元素public class 最快效率求出乱序数组中的第k小元素 { public static void main(String[] args) { // TODO Auto-generated method stub int[] arr = { 9, 8, 4, 3215, 1, 54, 9, 3 }; System.out.println(f(a...

2019-01-20 15:09:26 340

原创 一题三解|TwoSum

TwoSum描述给一个整数数组,找到两个数使得他们的和等于一个给定的数 target。你需要输出这两个数的下标, 并且第一个下标小于第二个下标。注意这里下标的范围是 0 到 n-1。你可以假设数组递增有序。输入第一行:N个整数,作为数组的元素,空格分开第二行:target输出两个下标,空格隔开。如有多组满足要求,输出靠前的一组。样例输入42 7 11 159样例输出0...

2019-01-19 20:04:02 208

原创 题解|旋转数组中的二分查找

题解|旋转数组中的二分查找描述输入一个递增排序的数组(元素不重复)的一个旋转(次数不详),找出某个元素.输入第一行:N,数组的长度第二行:N个整数,作为数组的元素,空格分开第三行:要查找的关键字K输出关键字K的下标,如果没有找到,输出-1样例输入56 1 2 3 41样例输出1思路O(n)的算法不写了,下面是O(lgn)的。在旋转数组中先找到最小的一个元素位置...

2019-01-19 17:25:58 543

原创 题解|小明登楼梯——递归设计

小明登楼梯——递归设计描述小明刚刚看完电影《第K级台阶》,离开电影院的时候,他数了数礼堂前的台阶数,恰好是K级!站在台阶前,他突然又想着一个问题:如果我每一步只能迈上1个或2个台阶。先迈左脚,然后左右交替,最后一步是迈右脚,也就是说一共要走偶数步。那么,上完K级台阶,有多少种不同的上法呢?请你利用计算机的优势,帮助小明寻找答案。输入一个整数K(10<=K<=20)输出...

2019-01-18 23:15:48 1765

原创 取三个数的中间值

取三个数的中间值public class 查找三个数的中间值 { public static void main(String[] args) { // TODO Auto-generated method stub System.out.println(f(5, 10, 0)); } private static int f(int a, int b, int c) { ...

2019-01-18 13:03:07 13487 1

原创 快排之双向扫描分区

快排之双向扫描分区public class 快排之双向扫描分区 { public static void main(String[] args) { // TODO Auto-generated method stub int[] arr = { 9, 8, 7, 6, 5, 0, 4, 8, 3, 2, 8, 7, 10 }; quickSort(arr, 0, arr.len...

2019-01-18 12:18:57 339 2

原创 快排之三指针扫描分区

快排之三指针扫描分区适用于选取主元时,所选主元在数组中有多个相同值。若数组中没有主元的相同值,没有必要用三指针扫描分区法。下面主要分析的是partition部分的方法:三个指针:less(指向第一个等于主元的位置);sc(向右移动的扫描指针,指针左侧皆小于等于主元);bigger(指针右侧皆大于主元)在分区时有三个阶段:阶段1:sp指针一直向右移,当扫描到小于主元的值时sc++,当...

2019-01-18 12:10:18 899 4

原创 快排之单向扫描分区法

快排之单向扫描分区法public class 快排之单向扫描分区 { public static void main(String[] args) { // TODO Auto-generated method stub int[] arr = { 9, 8, 7, 6, 5, 0, 4, 8, 3, 2, 8, 7, 10 }; quickSort(arr, 0, arr.le...

2019-01-17 19:19:07 751 4

原创 题解|最长连续递增子序列

最长连续递增子序列给定一个未经排序的整数数组,找到最长且连续的的递增序列。示例 1:输入: [1,3,5,4,7]输出: 3解释: 最长连续递增序列是 [1,3,5], 长度为3。尽管 [1,3,5,7] 也是升序的子序列, 但它不是连续的,因为5和7在原数组里被4隔开。示例 2:输入: [2,2,2,2,2]输出: 1解释: 最长连续递增序列是 [2], 长度为1。...

2019-01-15 18:47:46 1153

原创 题解|在有空字符串的有序字符串数组中查找

在有空字符串的有序字符串数组中查找在有空字符串的有序字符串数组中查找某一字符串给定条件,在字符串数组{“a”,"",“ac”,"",“ad”,“b”,"",“ba”}中查找b的索引思路因为字符串数组是有序的,所以尝试采用二分查找。在二分查找过程中,中值有可能是空字符串,所以要对这

2019-01-15 11:55:10 485

原创 题解|二维矩阵最短路径

[问题描述]X星球居民小区的楼房全是一样的,并且按矩阵样式排列。其楼房的编号为1,2,3…当排满一行时,从下一行相邻的楼往反方向排号。比如:当小区排号宽度为6时,开始情形如下:1 2 3 4 5 612 11 10 9 8 713 14 15 …我们的问题是:已知了两个楼号m和n,需要求出它们之间的最短移动距离(不能斜线方向移动) 输入为3个整数w m n,空格分...

2019-01-15 09:39:18 4392 1

原创 Minesweeper

MinesweeperUVA10189注意:遍历一遍二维矩阵,将地雷周围的字符++(注意边界)即可import java.util.Scanner;public class Main { public static void main(String[] args) { // TODO Auto-generated method stub Scanner sc = new Sc...

2019-01-14 19:26:55 419

原创 3n + 1 Problem

UVA 100import java.util.Scanner;public class Main { public static void main(String[] args) { // TODO Auto-generated method stub Scanner sc = new Scanner(System.in); while (sc.hasNext()) { ...

2019-01-13 23:40:17 104

原创 登楼梯——递归设计

登楼梯——递归设计楼梯有n阶,小白一次可以上1阶,2阶或者3阶,实现一个方法,计算有多少种走完楼梯的方式。首先定义函数int f(int n)的宏观语义是返回小白走完n阶台阶的方式数。其次寻找出规模更小的子问题。尝试逆向思考,假设小白已经到达第n阶台阶上。那么小白上一步所在的位置在哪?因为小白可以踏出三种步伐,所以小白到达第n阶台阶时的上一位置的情况如下图所示,共三种。事实上,到这一...

2019-01-13 15:30:36 1155

原创 汉诺塔

汉诺塔尝试进行如下操作:1.将n - 1个盘子从A移动到C,B为辅助。2.将最大盘即第n个盘子从A移动到B。观察可发现,此时只要将在C的n - 1个盘子移动到B即可解决整个问题。即此时将n - 1个盘子从C移动到B,A为辅助是一个规模更小的子问题。(最大盘在B等价于B处为空)子问题找到了,然后调用递归即可。代码如下public class 汉诺塔 { public static...

2019-01-13 00:23:21 199

原创 递归基础练习之插入排序的递归形式

递归基础练习之插入排序的递归形式递归写法首先确定insertSort的宏观语义是对以数组的0至第n索引项进行插入排序假设要调用insertSort(arr, n),可以得到规模更小的子问题:1.对数组的0至第n - 1索引项进行插入排序2.将数组的第n索引项插入到有序数组中聚焦函数的宏观语义,可以更好地写出递归函数。// 对0至n索引项进行插入排序 private static v...

2019-01-12 15:52:03 1097

原创 递归基础练习

简单递归练习翻转字符串public class 翻转字符串 { public static void main(String[] args) { // TODO Auto-generated method stub String s = "abcefghijk"; System.out.println(f(s)); } private static Strin

2019-01-11 22:17:30 199

原创 进制运算例题

进制运算例题一整数数列中某一数字出现1次,其他数字都出现K次,输出出现1次的数字。思路明确一个性质K进制的K个相同数字不进位相加,其结果为0。以两个3的二进制为例所以,用进制运算解此题,可以将数组中每个数字转为K进制然后相加,所得结果为出现1次数字的K进制,最后将结果转为2进制输出即可。需要注意的是:1.不进位加法的写法:转换为K进制后,每列相加之和模K。2.运用二维数组进行...

2019-01-11 16:08:19 1063

原创 二进制中1的个数

题解请实现一个函数,输入一个整数,输出该数二进制中1的个数。思路这里提供一种比较有趣的方法。我们可以尝试将num二进制中的每个1依次消去(即变为0),而后统计共执行了多少次消除操作。首先明确两个性质:1.整数减一后,其二进制最低位的1会变为0而其后的0全部变为1。(感兴趣的可以自行验证)2.整数减一后,再与整数做与运算((num-1)&num)即可实现消除二进制中最低位1...

2019-01-04 15:40:58 382

原创 数组中唯一成对的数字

数组中唯一成对的数字题解1-1000折1000个数放在含有1001个元素的数组中,只有唯一的一个元素值重复,其它均只出现一次。每个数组元素只能访问一次,设计一个算法,将它找出来,不用辅助存储空间。对于这道题目,可以运用位运算中的异或运算来解决。首先明确异或运算的两个性质:1.A^A = 02.A^0 = A假设在arr数组中K为重复的数字,则获取K的思路是将数组中的其它非重复数字...

2019-01-01 17:04:12 419

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除