首页 > 代码库 > 关于数组的算法题

关于数组的算法题

数字在排序数组中出现的次数

function GetNumberOfK(data, k)
{
    if(data.indexOf(k) == -1) return 0;
       var count = data.lastIndexOf(k)-data.indexOf(k);
    return count+1;
}

数组中只出现一次的数字

数组中出现次数超过一半的数字

连续子数组的最大和

从1-n中1出现的次数

二维数组中的查找

function Find(target, array)
{
    // write code here
   var i=0;
   var j=array[0].length-1;
    while(j>=0 && i<array.length )
   if(target<array[i][j]){
       j--;
   }else if(target>array[i][j]){
       i++
   }else{
       return true;
   }
   

数组去重

排序算法总结

如何评价算法的优劣

  1. 时间复杂度:一个算法执行所耗费的时间。
  2. 空间复杂度: 运行完一个程序所需内存的大小。
  3. 稳定性:排序后两个相等的值的位置和排序之前的位置是否相同,如果相同就是稳定(不稳定的算法:快、选、堆、希)
  4. 内/外排序:排毒操作是否需要额外空间

1.冒泡排序

基本原理:重复的走访要排序的数组,每次比较两个值,如果前者大于后者则交换两者的位置。这样最大的元素会慢慢浮到数组的末端

技术分享

外层控制未排序数组的次数

内层控制未排序数组内两栏比较的次数

 

function bubbleSort(arr){
    var len=arr.length;
    for (var i = 0; i < len; i++) {
        for (var j = 0; j < len-1-i; j++) {
            if (arr[j]>arr[j+1]) {
                var temp=arr[j+1];
                arr[j+1]=arr[j];
                arr[j]=temp;
            }
        }
    }
    return arr;
}

 2.选择排序

基本原理:每次找出数组中最小元素的位置,然后和未排序数组的第一个值进行交换

function selectSort(arr){
    var len=arr.length,
        minIndex;

    for (var i = 0; i < len-1; i++) {
        minIndex=i;
        for (var j = i+1; j <len; j++) {
            if (arr[j]<arr[minIndex]) {
                minIndex=j;
            }
        }

        var temp=arr[i];
        arr[i]=arr[minIndex];
        arr[minIndex]=temp;
    }
    return arr;
}

 

数组中重复的数字

构建乘机数组

 

关于数组的算法题