算法技巧--两个原素交换位置
要求要不使用第三个变量的前题下且原地修改变量位置,将两个数组元素交易位置。
思路不使用第三个变量的话,只能在原来的两上变量在动心思。这两个变量没说不能变,那么就使用数学的方式将两个变量交换一下。只需要把两个变量中的其中一个借用来存储当前的变量即可,最后再还原回去。步骤:
借变量
交换元素
其实公式也很好记,变量位置不变,只是变了符号:
a + ba - ba - b
123456789101112131415161718192021222324252627282930package com.liukai.algorithm.sort;/** * Created by liu kai on 16/9/8. * 交换数组两个元素位置 */public class Change { public static void main(String[] args) { int x = 3, y = 5; int[] arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; test( ...
算法技巧--一维数组去重
说明这段代码的思路是使用两个循环来对数组进行去重操作,并将结果重新封装到一个新的数组中。整体思路是通过两个循环遍历数组,将重复出现的元素标记为 -1,然后根据标记的情况创建一个新的数组来存储去重后的结果。
代码的时间复杂度为 O(n^2),其中 n 是输入数组的长度。外层循环从 0 到 n-2 进行迭代,内层循环从外层循环的下一个元素开始迭代到 n-1。因此,内层循环的迭代次数会逐渐减少。在最坏情况下,即数组中没有重复元素时,内层循环将完全执行 n-1 + n-2 + ... + 1 = (n-1)n/2 次。这是一个等差数列求和公式。然而,在内层循环中,当发现重复元素时,会将重复元素标记为 -1,并增加 len 计数器。内层循环在后续迭代中会跳过被标记为 -1 的元素。因此,当数组中有 k 个重复元素时,内层循环的迭代次数将会减少 k 次。最后,创建新数组的循环将迭代 n 次,其中 n 是输入数组的长度。
因此,总体来说,该代码的时间复杂度为 O(n^2)。在最坏情况下,即数组中没有重复元素时,时间复杂度为 O(n^2)。在最好情况下,即数组中所有元素都是重复的,时间复杂度为 O(n ...