八大排序算法总结与java实现

概述

因为健忘,加上对各种排序算法理解不深刻,过段时间面对排序就蒙了。所以决定对我们常见的这几种排序算法进行统一总结,强行学习。首先罗列一下常见的十大排序算法:

  • 直接插入排序
  • 希尔排序
  • 简单选择排序
  • 堆排序
  • 冒泡排序
  • 快速排序
  • 归并排序
  • 基数排序

【算法】10亿int型数,统计只出现一次的数

题目

10亿int整型数,以及一台可用内存为1GB的机器,时间复杂度要求O(n),统计只出现一次的数?

分析

首先分析多大的内存能够表示10亿的数呢?一个int型占4字节,10亿就是40亿字节(很明显就是4GB),也就是如果完全读入内存需要占用4GB,而题目只给1GB内存,显然不可能将所有数据读入内存。

我们先不考虑时间复杂度,仅考虑解决问题。那么接下来的思路一般有两种。

  1. 位图法:用一个bit位来标识一个int整数。
  2. 分治法:分批处理这10亿的数。

一种是位图法,如果各位老司机有经验的话很快会想到int整型数是4字节(Byte),也就是32位(bit),如果能用一个bit位来标识一个int整数那么存储空间将大大减少。另一种是分治法,内存有限,我想办法分批读取处理。下面大致分析一下两种思路。

遗传算法的基本概念和Java实现

基因遗传算法是一种灵感源于达尔文自然进化理论的启发式搜索算法。该算法反映了自然选择的过程,即最适者被选定繁殖,并产生下一代。本文简要地介绍了遗传算法的基本概念和实现,希望能为读者展示启发式搜索的魅力。

如上图(左)所示,遗传算法的个体由多条染色体组成,每条染色体由多个基因组成。上图(右)展示了染色体分割和组合的方式。

【Java】Integer变量相等(==)比较问题

题目

这是关于一段令人疑惑的Java代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
class TestIntegerCache {

public static void main(String[] args){
Integer i3 = 100;
Integer i4 = 100;
System.out.println(i3 == i4);

Integer i5 = 1000;
Integer i6 = 1000;
System.out.println(i5 == i6);
}

}

这么简单,执行结果是什么?

true
false

一个是true,一个是false!
这是为什么呢?为什么和大多数人心里想的不一样!

Java 8系列之重新认识HashMap

本文来自美团点评技术团队: Java 8系列之重新认识HashMap

摘要

HashMap是Java程序员使用频率最高的用于映射(键值对)处理的数据类型。随着JDK(Java Developmet Kit)版本的更新,JDK1.8对HashMap底层的实现进行了优化,例如引入红黑树的数据结构和扩容的优化等。本文结合JDK1.7和JDK1.8的区别,深入探讨HashMap的结构实现和功能原理。

简介

Java为数据结构中的映射定义了一个接口java.util.Map,此接口主要有四个常用的实现类,分别是HashMapHashtableLinkedHashMapTreeMap,类继承关系如下图所示:

【面试题】Java String常量相等(==)问题

问题

以下三个结果分别输出(true or false)?别小看它,很多程序员因为上面问题出过生产bug

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
String s3 = "s";
String s4 = "s";
System.out.println(s3==s4);


---
String s5 = "hello";
String s6 = "he"+"llo";
System.out.println(s5==s6);


---
Integer i = 2017;
Integer j = 2017;
System.out.println(i==j);


---
String s1 = new String("s");
String s2 = new String("s");
System.out.println(s1==s2);
System.out.println(s1.intern()==s2.intern());

详解Java类的生命周期

引言

最近有位细心的朋友在阅读笔者的文章时,对Java类的生命周期问题有一些疑惑,笔者打开百度搜了一下相关的问题,看到网上的资料很少有把这个问题讲明白的,主要是因为目前国内Java方面的教材大多只是告诉你“怎样做”,但至于“为什么这样做”却不多说,所以造成大家在基础和原理方面的知识比较匮乏,所以笔者今天就斗胆来讲一下这个问题,权当抛砖引玉,希望对在这个问题上有疑惑的朋友有所帮助,文中有说的不对的地方,也希望各路高手前来指正。

首先来了解一下jvm(java虚拟机)中的几个比较重要的内存区域,这几个区域在java类的生命周期中扮演着比较重要的角色:

  • 方法区:在java的虚拟机中有一块专门用来存放已经加载的类信息、常量、静态变量以及方法代码的内存区域,叫做方法区。
  • 常量池:常量池是方法区的一部分,主要用来存放常量和类中的符号引用等信息。
  • 堆区:用于存放类的对象实例。
  • 栈区:也叫java虚拟机栈,是由一个一个的栈帧组成的后进先出的栈式结构,栈桢中存放方法运行时产生的局部变量、方法出口等信息。当调用一个方法时,虚拟机栈中就会创建一个栈帧存放这些数据,当方法调用完成时,栈帧消失,如果方法中调用了其他方法,则继续在栈顶创建新的栈桢。

【Android】Audio音频输出通道切换 - 蓝牙、外放

手机音频的输出有外放(Speaker)、听筒(Telephone Receiver)、有线耳机(WiredHeadset)、蓝牙音箱(Bluetooth A2DP)等输出设备。在平时,电话免提、插拔耳机、连接断开蓝牙设备等操作系统都会自动切换Audio音频到相应的输出设备上。比如电话免提就是从听筒切换到外放扬声器,插入耳机就是从外放切换到耳机。

场景需求

Android系统自动切换的这些策略,并不能全部满足我们的产品需求,比如音乐App需要对听歌时拔出耳机的操作进行阻止(暂停播放),防止突然切换到外放导致尴尬。

最近项目需求希望即使在连接蓝牙音箱的情况下,仍旧使用手机外放播放音频。这就需要强制切换Audio输出通道,打破系统原有的策略。

查阅资料,看到了Android中可以通过AudioManager查询、切换当前Audio输出通道,并且在Audio输出发生变化时,捕获并处理这种变化。

Google 面试题 | 判断字符串是否可由重复子字符串组成

题目描述

对于一个非空字符串,判断其是否可由一个子字符串重复多次组成。字符串只包含小写字母且长度不超过10000。

样例1

  • 输入: “abab”
  • 输出: True
  • 样例解释: 输入可由”ab”重复两次组成

样例 2

  • 输入: “aba”
  • 输出: False

样例 3

  • 输入: “abcabcabcabc”
  • 输出: True
  • 样例解释:输入可由”abc”重复四次组成

【Android】判断应用Application、Activity是否处于活动状态

通过ActivityManager我们可以获得系统里正在运行的activities,包括进程(Process)等、应用程序/包、服务(Service)、任务(Task)信息。

1、判断应用App是否活动

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
/**
* 判断应用是否已经启动
* @param context 一个context
* @param packageName 要判断应用的包名
* @return boolean
*/
private boolean isAppAlive(Context context, String packageName){
ActivityManager activityManager =
(ActivityManager)context.getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.RunningAppProcessInfo> processInfos
= activityManager.getRunningAppProcesses();
for(int i = 0; i < processInfos.size(); i++){
if(processInfos.get(i).processName.equals(packageName)){
Log.i("NotificationLaunch",
String.format("the %s is running, isAppAlive return true", packageName));
return true;
}
}
Log.i("NotificationLaunch",
String.format("the %s is not running, isAppAlive return false", packageName));
return false;
}

Powered by Hexo and Hexo-theme-hiker

Copyright © 2013 - 2019 iTimeTraveler All Rights Reserved.

访客数 : | 访问量 :