前言:
这道题我先用了一种排序的方式来进行求解,目的是巩固排序算法。当然对于更加高效的方式,我也会采纳学习。
原题如下:
给定一个包含 [0, n] 中 n 个数的数组 nums ,找出 [0, n] 这个范围内没有出现在数组中的那个数。
题意:
一个数组有 n 个数据,数组中数据值的范围在[0,n]这个区间内。找出在这个数组中属于这个范围但是没有出现在该数组中的数字,名为丢失的数字。
解题思路:
思路一: 从数组本身出发,如果我们将这组数据进行从小到大排序,那问题将会变得很简单,只需要逐一进行判断即可。但是这种方式的时间复杂度比较高。
思路二: 从区间范围出发,不需要对数组数据进行排序。假设数组中不存在丢失的数字,那么数组数据的总和将会和区间 [0 ,n] 中的所有整数之和是一样的。所以,计算出区间 [0,n] 所有整数之和 — 数组数据的总和 = 丢失的数字。但是这种方式得考虑可能会出现越界的情况。
虽然思路二比思路一更加高效,但是毕竟是排序专题嘛,我们着重分析思路一。目的是巩固排序相关的经典算法。对于思路二其实也就是一个数学问题,在后面会附加上详细代码。
那用什么排序方法来对这组数据进行排序。在这里我选择 交换排序 - - 冒泡排序。
冒泡排序思想:
对存放原始数据的数组,按从前往后的方向进行多次扫描,每一次扫描称为一趟。当发现比较的两个数据发生逆序时,就将这两个数据互换,直到整个数据有序。每一趟都会选择出一个满足条件的放到后面。通过这样的方式数据由无序就慢慢变为有序了。
其实冒泡排序很简单,我们只需要