
算法
goforitaaa
这个作者很懒,什么都没留下…
展开
-
二分搜索
二分搜索:二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。简单实现:非递归/** * a 所需要查找的数组 * x 查找的数 * @param a * @param x * @return */public static int binarySearch(int ...原创 2018-09-13 22:29:14 · 126 阅读 · 0 评论 -
找出在A数组中,B数组中没有的数字,在B数组中,A数组中没有的数字
思路:用map存储数组A,并将元素为键,值为0,找出A数组中,查找是否包含B的键,包含的话,将值置为1.不包含的就是在B数组中,不在A数组中的元素,遍历Map,如果值为0,就是在A数组中,不在B数组中的元素。public static void find(int arr[],int[]b){ HashMap<Integer,Integer> map = new ...原创 2019-09-14 13:58:18 · 1865 阅读 · 0 评论 -
连续最大子序列和
题目描述:HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止)。给一个数组,返回它的最大连续子...原创 2019-09-12 12:42:35 · 288 阅读 · 0 评论 -
插入排序
插入排序:算法思想:每步将一个待排序的记录,按其关键码值的大小插入前面已经排序的文件中适当位置上,直到全部插入完为止。举例: 8 6 2 3 1 5 7 4 第一个与元素默认为排序好的,i的范围 (i=1...n-1) j每次表示当前元素,j的初始值为i,依次向前比较,是否比前一个数小,小的话,插入,否则不动。 第一次 i = 1,j = 1 6和 8...原创 2019-08-17 19:08:04 · 121 阅读 · 0 评论 -
选择排序
选择排序:选择排序(Selection-sort)是一种简单直观的排序算法。它的工作原理:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。2.1 算法描述n个记录的直接选择排序可经过n-1趟直接选择排序得到有序结果。具体算法描述如下:初始状态:无序区为R[...原创 2019-08-17 11:26:22 · 103 阅读 · 0 评论 -
快速排序
快速排序:时间复杂度(O(NlogN))算法思想:双路排序:设置 :设置第一个元素为基准,i,从左向右查找,j从右向左查找,如果找到一个i的位置,e>=v, j<=v,交换两个数,继续搜索,直到i>j,跳出。将j与第一个基准互换。import java.util.Random;import java.util.Scanner;// 随机数组 近乎有序...原创 2019-08-16 17:24:30 · 100 阅读 · 0 评论 -
整数替换
题目:给定一个正整数n,你可以做如下操作:1. 如果n是偶数,则用n / 2替换n。2. 如果n是奇数,则可以用n + 1或n - 1替换n。n变为 1 所需的最小替换次数是多少?示例 1:输入:8输出:3解释:8 -> 4 -> 2 -> 1示例 2:输入:7输出:4解释:7 -> 8 -> 4 -> 2 ...原创 2019-08-21 17:47:41 · 289 阅读 · 0 评论 -
压缩密码
题目描述:输入一串字符串,aaaabbbccc,对它进行压缩,输出 a4b3c3,如果压缩后它的长度和原来一样,则输出原来的字符串输入示例: 输入示例: aaabbbccc abc输出: a3b3c3 ...原创 2019-08-21 11:46:20 · 441 阅读 · 0 评论 -
编辑距离
概念字符串的编辑距离,又称为Levenshtein距离,由俄罗斯的数学家Vladimir Levenshtein在1965年提出。是指利用字符操作,把字符串A转换成字符串B所需要的最少操作数。其中,字符操作包括:删除一个字符 a) Insert a character插入一个字符 b) Delete a character修改一个字符 c) Replace a ...原创 2019-08-19 14:26:38 · 172 阅读 · 0 评论 -
二分查找
二分查找的几种写法:一:包含右边边界 private static int binarySearch(int a[],int target){ int left = 0; int right =a.length-1; while (left<=right){ int mid = left + (right-l...原创 2019-08-07 09:33:13 · 96 阅读 · 0 评论 -
背包问题
第一种问题:0 1背包问题,有 n 个重量和价值分别为Wi,Vi的物品,现从这些物品中挑选出总量不超过 W 的物品,求所有方案中价值总和的最大值。Input:输入包含多组测试用例,每一例的开头为两位整数 n、W(1<=n<=10000,1<=W<=1000),接下来有 n 行,每一行有两位整数 Wi、Vi(1<=Wi<=10000,1<...原创 2019-07-31 19:08:27 · 118 阅读 · 0 评论 -
二进制中1的个数
二进制中1的个数题目描述:输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。public int NumberOf1(int n) { int count=0; if(n!=0){ int flag=1; while(flag!=0){ if ((n & flag) != 0)...原创 2019-07-08 23:06:13 · 129 阅读 · 0 评论 -
插入排序
算法思想:一般来说,插入排序都采用in-place在数组上实现。具体算法描述如下:从第一个元素开始,该元素可以认为已经被排序; 取出下一个元素,在已经排序的元素序列中从后向前扫描; 如果该元素(已排序)大于新元素,将该元素移到下一位置; 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置; 将新元素插入到该位置后; 重复步骤2~5。public static void ...原创 2019-06-23 23:20:01 · 108 阅读 · 0 评论 -
冒泡排序
冒泡排序:是一种简单的排序算法,它重复的走访过要排序的序列,一次比较两个元素,如果他们的顺序错误。则把他们的交换过来,重复的进行,直到在没有需要进行交换,也就是说该数列已经排序完成 。public static int[] bubbleSort(int[] arr){ boolean flag =false; for (int i = 0; i <arr...原创 2019-06-23 20:43:39 · 92 阅读 · 0 评论 -
给定一个字符串,找出其中重叠子串的个数
题目描述:给定一个字符串aaabcccaddfffaa重叠子串个数为 a:5 d:2 c:3 f:3每次判断当前字符串是否和下一个相等,如果相等则,则加加,如果到当前这个串的最后一个,则和前一个比较是否相等。 public static void sub(String str){ char a[] = str.toCharArray(); H...原创 2019-09-14 14:59:55 · 494 阅读 · 0 评论