数据结构&&算法
多线程
这个作者很懒,什么都没留下…
展开
-
判断一个无序数列是否是等差数列
这个题目是腾讯电话面试的考题之一:给定一个数组,不适用任何排序方法,快排什么的,判断出一个数列是否是等差数列,并且要求算法复杂度不得超过快排。我的想法是只是判断一个数组是否为等差数列,相对来说容易好多。思路如下: (1)对数组进行第一次遍历,找出数组中的min.max (2)如果是等差数列,那么公差必然是(max-min)/(n-1) n为元素个数 (3)有了公差,有了首原创 2017-03-03 10:55:59 · 6654 阅读 · 1 评论 -
插入排序
(1) 插入排序 INSERTION-SORT 如果输入数组中仅有常数个元素需要在排序过程中存储在数组之外,则称排序算法是原址的。 插入排序基本思路:该排序算法属于原址排序,在排序过程,只是开辟常数个新的内存空间,即只有常数个元素在排序过程中在数组之外。 算法伪代码: 算法复杂度:时间复杂度为O(N^2) 空间复杂度为O(1) * 算法伪代码:原创 2017-03-14 15:46:30 · 412 阅读 · 0 评论 -
归并排序算法
归并排序 分治思想:一个算法一次或者多次的递归调用其自身以解决紧密相关的若干子问题,这些算法典型的遵循分治法的基本思想。 分治思想主要有三个步骤: (1) 分解,分解成若干子问题。 (2) 解决,递归的求解各个问题。 (3) 合并,合并这些子问题的解或者原问题的解。 归并排序完全符合这个分治模式: (1)原创 2017-03-14 18:06:00 · 631 阅读 · 0 评论 -
冒泡排序算法
冒泡排序算法 冒泡排序是一种流形但是低效的排序算法,原理是临近的数字两两进行比较,按照从小到大或者从大到小的顺序进行交换,这样一趟过去后,最大或最小的数字被交换到了最后一位,然后再从头开始进行两两比较交换,直到倒数第二位时结束。这个算法比较简单。主要涉及两层循环,外循环表示循环迭代的次数,每次找出一个最大值或者最小值,最后一个元素不用进行排序,所以外层循环迭代次数为n-1。至于原创 2017-03-15 09:20:55 · 917 阅读 · 0 评论 -
随机排列数组
随机排列数组 很多随机算法通过对给定的输入变换排列以使输入随机化。 (a) 第一种做法给每个元素随机赋值给一个优先级。 伪代码: N= Arr.length 新建数组P[N] For i=1 to N: P[i]=random(1,N^3)///使得每个值尽可能唯一。 Sort Arr 用P的原创 2017-03-15 21:16:54 · 715 阅读 · 0 评论 -
最大子数组
最大连续子数组 问题描述:一个整数数组,数组中有正数也有负数,一个或连续的多个整数组成一个子数组,求所有子数组的和的最大值。 求解方法;暴力求解法、动态规划法、分治法(递归) (a) 暴力求解法就是找出所有的子数组,复杂度为O(N^2)。一般不采用。 (b) 分治法。时间复杂度为O(nlogn)。其基本思想就是将问题分解成子问题,然后递归求解子问题,直到解原创 2017-03-15 16:59:40 · 715 阅读 · 0 评论 -
选择排序算法
选择排序算法 直接从待排序数组里选择一个最小(或最大)的数字,每次都拿一个最小数字出来,顺序放入新数组,直到全部拿完。再简单点,对着一群数组说,你们谁最小出列,站到最左边。再继续刚才的操作,一直到最后一个,继续站到左边边,现在数组有序了,从小到大。 package sort;import java.util.Arrays;public class SelectSort { p原创 2017-03-15 11:45:00 · 618 阅读 · 0 评论