
算法
张超帅
哈哈哈哈哈哈
展开
-
稳定排序和不稳定排序
稳定排序和不稳定排序 这几天笔试了好几次了,连续碰到一个关于常见排序算法稳定性判别的问题,往往还是多选,对于我以及和我一样拿不准的同学可不是一个能轻易下结论的题目,当然如果你笔试之前已经记住了数据结构书上哪些是稳定的,哪些不是稳定的,做起来应该可以轻松搞定。本文是针对老是记不住这个或者想真正明白到底为什么是稳定或者不稳定的人准备的。 首先,排序算法的稳定性大家应该都知道,通俗地讲就是转载 2017-08-17 12:09:01 · 220 阅读 · 0 评论 -
跟hashmap有关的算法题
题目描述: 一个数组中除了两个数字只出现了一次外,其它数字都出现了两次。找出这两个数 示例: 输入:{2 ,4 ,3 ,6 ,2 ,3} 输出:4,6 package offer;import java.util.HashMap;import java.util.Iterator;public class Problem40 { public原创 2017-10-01 16:21:30 · 887 阅读 · 0 评论 -
递归的理解
我们先来看一段代码:package qiuzhao;public class DiguiTest { public static void main(String[] args) { DiguiTest t=new DiguiTest(); int i=1; t.f(); } private void f() { i原创 2017-10-01 23:14:25 · 192 阅读 · 0 评论 -
你真的会写二分查找吗?
二分查找/** * 二分查找,找到该值在数组中的下标,否则为-1 */static int binarySerach(int[] array, int key) { int left = 0; int right = array.length - 1; // 这里必须是 <= while (left <= right) { int mid = (l原创 2017-10-01 22:32:32 · 434 阅读 · 0 评论 -
数组的最大最小topk值
对于一个无序数组,数组中元素为互不相同的整数,请返回其中最小的k个数,顺序与原数组中元素顺序一致。 给定一个整数数组A及它的大小n,同时给定k,请返回其中最小的k个数。 [1,2,4,3],4,2 返回:[1,2]链接:https://www.nowcoder.com/questionTerminal/ec2575fb877d41c9a33d9bab2694ba47?source=relati原创 2017-10-09 22:41:03 · 342 阅读 · 0 评论 -
String和char的算法题
读入一个字符串str,输出字符串str中的连续最长的数字串/*算法思想:用max表示经过的数字长度最大值,count表示数字计数器,当为字母时重置为0*end表示数字尾部,每次满足数字时,对max进行判断,当max小于于count时,更新max和end*/import java.util.Scanner;public class Main { public static void mai原创 2017-09-25 23:34:34 · 345 阅读 · 0 评论 -
堆排序
先上图(看不清可以下载) 建立大顶堆或者小顶堆的过程 从下到上,从右到左,选择非叶子节点进行比较,交换较大(较小元素)升序,建立大顶堆 降序,建立小顶堆再简单总结下堆排序的基本思路: a.将无序序列构建成一个堆,根据升序降序需求选择大顶堆或小顶堆; b.将堆顶元素与末尾元素交换,将最大元素”沉”到数组末端(最大堆); c.重新调整结构,使其满足堆定义,然后继续交换堆顶元素与当前末尾元原创 2017-10-04 08:36:38 · 213 阅读 · 0 评论 -
排序的写法
java util包下的Arrays.sort(A)就能进行排序package lanqiao;import java.lang.reflect.Array;import java.util.*;public class Test9 { public static void main(String[] args) { int[] a={9,2,5,6,1,4};原创 2017-09-13 08:37:24 · 238 阅读 · 0 评论 -
递归
设有一个递归算法如下int f(int n) { if(n<=3) return 1; else return f(n-2)+f(n-6)+1;}试问计算f(f(9))时需要计算()次f函数。答案:12 f(9)有7次,f(7)有5次。次数看有多少个结点。结点个数就是计算的次数。原创 2017-09-18 10:09:29 · 1404 阅读 · 0 评论 -
查找
给定一个整数sum,从有N个有序元素的数组中寻找元素a,b,使得a+b的结果最接近sum,最快的平均时间复杂度是答案:O(n)答案:O(n) 思想类似于两端向中间扫描 1、设定两个指针P1、P2,分别指向数组开始和结尾,即P1指向最小值,P2指向最大值; 2、计算 *P1+*P2 的值为 SUM,与 sum 比较,记录它们的差值 DIF 和 SUM,若 SUM原创 2017-09-24 21:36:16 · 222 阅读 · 0 评论 -
时间复杂度
算法的时间复杂度取决于待处理数据的状态(初始排序)和问题的规模。原创 2017-09-23 21:05:12 · 242 阅读 · 0 评论 -
质数相关
质数的定义:质数(prime number)又称为素数,有无限多个。质数定义在大于1的自然数中,除了1和它本身以外不会再有其它因数的数称为质数。(1)从2开始,2是最小的质数。(2)除了2之外的偶数全都不是质数,因为除了1和自身之外它们还能被2整除。若为大于2的奇数,则进入下一步继续判断。(3)将其开方,若从3到开方向下取整之间的所有奇数都不能将其整除,则说明该数为质数。至于为什么只用除到其平方根?原创 2017-09-18 10:42:01 · 654 阅读 · 0 评论 -
关于数组字符串中重复的值问题类似算法题
在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。package lanqiao;import java.util.ArrayList;public class DupFind {原创 2017-09-13 00:22:11 · 307 阅读 · 0 评论 -
字符串和数组转换api
Java中char是一个基本类型,而String是一个引用类型。有时候我们需要在它们之间互相转换。String转换为char在Java中将String转换为char是非常简单的。 1. 使用String.charAt(index)(返回值为char)可以得到String中某一指定位置的char。 2. 使用String.toCharArray()(返回值为char[])可以得到将包含整个St原创 2017-09-13 09:35:25 · 920 阅读 · 0 评论 -
排序
冒泡排序特征第一趟排序之后最大值会在最后面,第二趟排序会在次后面 选择排序特征第一趟排序之后最小值会在最前面,第二趟排序会在次前面 插入排序特征第一趟排序范围0~1,前一个数比后一个数小,第二趟排序范围0~2,前三个数小大排列 快速排序以一个值为分界点快速排序: 快排还需要分块排序,浪费时间基数排序:对给定的关键字序列110, 119, 007, 911, 114, 120, 122 进行基原创 2017-08-10 18:49:42 · 442 阅读 · 0 评论 -
排序的选择问题
希望用最快的速度从一个无序数组中挑选出其中前十个最大的元素,在以下的排序方法中(B)快速排序堆排序归并排序基数排序题目不在乎空间只要速度,没记错应该是基数排序最快且稳定。 如果结合实际(顾及空间开销)考虑的话,我会选择堆排序,因为ABC时间复杂度(O(N*logN))虽然一样,但是堆排序在建堆(时间复杂度近似O(N))之后取十次大根堆的堆顶就行了,即不需要执行完整个堆排序,但A和C需要走完原创 2017-08-17 12:17:32 · 802 阅读 · 0 评论 -
二分法及变形题
给定一个已经排好序的字符串数组,空字符串散布在该数组中,编写一个函数寻找一个 给定字符串的位置。public static int getIndex(String[] strs, String str){ if (strs == null || strs.length == 0 || str == null) { return -1; } int s...原创 2018-02-26 16:20:39 · 425 阅读 · 0 评论