数据结构和算法:判断字符数组中是否所有的字符都只出现过一次(javascript)

214 阅读1分钟
// 判断字符数组中是否所有的字符都只出现过一次

// 【题目】

// 给定一个字符类型数组chas[],判断chas中是否所有的字符都只出现过一次,请根据以下不同的两种要求实现两个函数。

// 【举例】

// chas=['a','b','c'],返回true;chas=['1','2','1'],返回false。

// 【要求】

// 1.实现时间复杂度为O(N)的方法。

const chas = ["1", "6", "7", "2", "3", "2", "4", "5"];
const isUnique = array => {
  if (array.length === 0) {
    return true;
  }
  let m = new Map();
  for (let i = 0; i < array.length; i++) {
    if (m.has(array[i])) {
      return false;
    } else {
      m.set(array[i], 1);
    }
  }
  return true;
};
console.log(isUnique(chas));

// 2.在保证额外空间复杂度为O(1)的前提下,请实现时间复杂度尽量低的方法。

const swap = (array, index1, index2) => {
  let tmp = "";
  tmp = array[index1];
  array[index1] = array[index2];
  array[index2] = tmp;
};

// 堆排序
const sort = array => {
  for (let j = 0; j < array.length - 1; j++) {
    for (let i = array.length - 1; i >= j; i--) {
      if (array[2 * i + 2 - j] && array[2 * i + 2 - j] > array[i]) {
        swap(array, 2 * i + 2 - j, i);
      }
      if (array[2 * i + 1 - j] && array[2 * i + 1 - j] > array[i]) {
        swap(array, 2 * i + 1 - j, i);
      }
    }
  }
};

const isUnique2 = array => {
  if (array.length === 0) {
    return true;
  }
  sort(array);
  for (let i = 0; i < array.length - 1; i++) {
    if (array[i] === array[i + 1]) {
      return false;
    }
  }
  return true;
};
console.log(isUnique2(chas));