精华内容
下载资源
问答
  • 在长度为n的()上,删除第一个元素,其算法的时间复杂度O(n) A.只有表头指针的不带表头结点的循环单链表 B.只有表尾指针的不带表头结点的循环单链表 C.只有表尾指针的带表头结点的循环单链表 D.只有表头指针的带...

    在长度为n的()上,删除第一个元素,其算法的时间复杂度为O(n)
    A.只有表头指针的不带表头结点的循环单链表
    B.只有表尾指针的不带表头结点的循环单链表
    C.只有表尾指针的带表头结点的循环单链表
    D.只有表头指针的带表头结点的循环单链表

    答案:A

    分析:
    单链表只能按单方向顺序访问节点,按题目意思,只有当A条件时,并当新元素的节点从表头插入,使得第一个元素的节点在表尾,才成立。这样表头指针顺序访问节点,访问至链表尾部时,复杂度刚好为O(n)。
    在这里插入图片描述
    对于B而言,不带头节点循环链表,表尾指针,如果是头插法则第一元素就是表尾指针rear(假设表尾指针为rear)所指的节点,即当前节点,时间复杂度为O(1)。如果是正常顺序插入节点(即非头插法),由于是循环链表,表尾指针rear指向最后一个元素,rear->next即为第一个元素(因为循环链表,表尾的next是表头,且没有头节点),时间复杂度仍然是O(1),所以B不成立。
    对于C而言,和B情况相似,多了一个表头节点,如果是头插法,则和B一样表尾指针rear所指当前元素即为第一个元素,时间复杂度为O(1)。如果是正常顺序插入节点,则比B多一个头节点,就变成rear->next->next,但时间复杂度仍然是O(1),所以C不成立。
    对于D而言,比A多一个头节点,虽然当头插法时时间复杂度为O(n+1),根据次数化解原则,就为O(n),但是答案不是选D(我也不是很清楚,老师讲解时直接跳过没有解释清楚,希望大佬评论解答,感激!!!)

    展开全文
  • 随机生成一个长度为n的数组

    万次阅读 2018-01-11 14:44:03
    1、随机生成长度为n,且值[min-max]范围内function generateRandomArr(n, min, max) { var arr = []; for (var i = 0; i < n; i++) { var random = Math.floor(Math.random() * (max - min + 1) + min); a

    1、随机生成长度为n,且值在[min-max]范围内

    function generateRandomArr(n, min, max) {
        var arr = [];
        for (var i = 0; i < n; i++) {
            var random = Math.floor(Math.random() * (max - min + 1) + min);
            arr.push(random);
        }
        return arr;
    }

    2、随机生成长度为n,且值在[0-(n-1)]范围内的无重复数据的有序数组

    function generateOrderedNoRepeatArr(n) {
        var arr = Array.from({length:n}, (v, k) => k);
        return arr;
    }

    3、随机生成长度为n,且值在[min-max]范围内的随机不重复数组,前提是n<(max-min)

    function generateNoRepeatdArr(n, min, max) {
        var arr = [],res = [];
        for(var i=min;i<max;i++){
            arr.push(i);
        }
        for (i=0 ; i <n; i++) {
            var index = parseInt(Math.random()*(arr.length));   
            res.push(arr[index]);
            arr.splice(index,1)  //已选用的数,从数组arr中移除, 实现去重复
        }
        return res;
    }

    4、随机生成长度为n,且值在[min-max]范围内的随机有序数组

    /*首先生成一个无须且可能有重复数据的数组*/
    function generateOrderedArr(n, min, max) {
        var arr = [];
        for (var i = 0; i < n; i++) {
            var random = Math.floor(Math.random() * (max - min + 1) + min);
            arr.push(random);
        }
        return arr;
    }
    /*以下为三路快排的方法,可对无序数组进行排序,达到良好的效果*/
    function __quickSort3Ways(arr, l, r) {
        if (l >= r) return;
        /*partition*/
        var random = Math.floor(Math.random() * (r - l + 1) + l);
        [arr[l], arr[random]] = [arr[random], arr[l]];
    
        var v = arr[l];
        var lt = l;  //arr[l+1...lt]<v
        var gt = r + 1;  //arr[gt...r]>v
        var i = l + 1;  //arr[lt+1...i]==v
        while (i < gt) {
            if (arr[i] < v) {
                [arr[i], arr[lt + 1]] = [arr[lt + 1], arr[i]];
                lt++;
                i++;
            } else if (arr[i] > v) {
                [arr[i], arr[gt - 1]] = [arr[gt - 1], arr[i]];
                gt--;
            } else {  //arr[i]==v
                i++;
            }
        }
        [arr[l], arr[lt]] = [arr[lt], arr[l]];
        __quickSort3Ways(arr, l, lt - 1);
        __quickSort3Ways(arr, gt, r);
    }
    
    function quickSort3Ways(arr, n) {
        __quickSort3Ways(arr, 0, n - 1);
    }
    /*排好序的数组*/
    quickSort3Ways(generateOrderedArr(100,1,10),100);
    展开全文
  • 循环队列长度为N。其队内有效长度为?(假设队头不存放数据) 对于循环队列 空间长度为N 是固定的 举个简单例子 空间 位置 1,2,3,4,5,6, 空间长度为6 本体中 front 不存数据 如果front <= rear 则(rear-...

    现有一循环队列,其队头指针为front,队尾指针为rear;循环队列长度为N。其队内有效长度为?(假设队头不存放数据)
    对于循环队列 空间长度为N 是固定的
    举个简单例子 空间 位置为 1,2,3,4,5,6, 空间长度为6
    本体中 front 不存数据
    如果front <= rear 则(rear-front)> 0 实际空间长度就是 (rear-front)举例 front = 1 ,rear = 4
    如果front > rear 则(rear-front)< 0 实际长度 就是 (rear+N-front) 举例front = 5 ,rear= 2
    为了统一两种情况 所以给出的结果为(rear-front+N)% N

    如果front中也存放数据时
    则结果为
    (rear-front+1+N)% N

    展开全文
  • 寻找长度为n数组中出现次数超过n/2的元素。  可以暴力枚举时间复杂度O(n^2),可以排个序然后处理时间复杂度O(n*lon(n)),主要花排序上。  元素较小的情况下可以哈希处理,空间复杂度O(n),时间复杂度...

           寻找长度为n数组中出现次数超过n/2的元素。

         可以暴力枚举时间复杂度为O(n^2),可以排个序然后处理时间复杂度为O(n*lon(n)),主要花在排序上。

         在元素较小的情况下可以哈希处理,空间复杂度为O(n),时间复杂度也为O(n)。但是题目并未说元素较小且较少,此时此法不妥,更通用的方法是只需设置一个变量记录元素次数,首次出现为1,下一个若相同计数器+1,否则-1,注意一些小细节,下面是代码:

    #include<iostream>
    #include<ctime>
    using namespace std;
    
    const int INF=1<<30;
    const int MAXN=1000;
    
    int init(int *pArray)
    {
    	srand((unsigned)(clock()));
    	int n=rand()%MAXN;
    	int *hash=new int[n];
    	for(int i=0;i<n;i++)
    		pArray[i]=rand()%(10000);
    	int num=0,randNum=rand()%(10000);
    	memset(hash,0,n*sizeof(int));
    	while(num<=(n/2+1))
    	{
    		int id;
    		do{
    		   id=rand()%n;
    		}while(hash[id]);
    		hash[id]=1;
    		pArray[id]=randNum;
    		num++;
    	}
    	delete []hash;
    	return n;
    }
    
    int findThatNumber(int *pArray,int n)
    {
    	if(NULL==pArray||0==n)
    		return INF;
    	int num=0,result,i=0;
    	while(i<n)
    	{
    		if(0==num)
    		{
    			num++;
    			result=pArray[i];
    		}
    		else if(result==pArray[i])
    			num++;
    		else num--;
    		i++;
    	}
    	return result;
    }
    
    int main()
    {
    	int array[MAXN]={1,3,5,7,3,6,3,3,3,3};
    	int n=10;
    	n=init(array);
    	for(int i=0;i<n;i++)
    	{
    		cout<<array[i]<<"  ";
    		if(i&&0==i%10)
    			cout<<endl;
    	}
    	cout<<endl<<findThatNumber(array,n)<<endl;
    	system("pause");
    	return 0;
    }


     

    展开全文
  • 【Python】生成一个长度为N的列表

    万次阅读 2019-04-09 09:33:35
    >>>N*[''] >eg: >>>A = 3*[''] >>>A >['', '', '']
  • 输入第一行输入序列的长度n和k,用空格分开。 第二行输入序列中的n个整数,用空格分开。输出如果存在某两个元素的和k,则输出yes,否则输出no。样例输入 9 10 1 2 3 4 5 6 7 8 9 样例输出 yes #include int ...
  • 题目是,给出一个长度为n(1&amp;amp;amp;amp;lt;n&amp;amp;amp;amp;lt;10000)的只有小写字母的字符串,然后找出一个长度为m的最小字典子序列。 如 orange 当m=3时,输出结果age 若borang...
  • 长度为n的整数数组循环左移右移m位

    千次阅读 2017-08-08 14:15:24
    长度为n的整数数组循环左移m位 右移m相当于左移n-m// pat.cpp : Defines the entry point for the console application. //#include "stdafx.h"#include void MoveLeft(int a[],int n,int m);int _tmain(int argc,...
  • 长度为n的顺序表L,编写一个时间复杂度O(n),空间复杂度O(1)的算法 该算法删除线性表中所有值x的数据元素 /*对长度为n的顺序表L,编写一个时间复杂度O(n),空间复杂度O(1)的算法 该算法删除...
  • 1、用户输入整数n,生成长度为N的列表,将n个随机的奇数放入列表中 #导入随机数模块 import random #input录入str 需转为int enter = int(input('请输入一个整数')) #列表推导式 target_list = [random.randint...
  • 题目:一个长度为n的数组里的所有数字都0到n-1的范围内,找出数组中任意一个重复的数字。 测试代码: public static void main(String[] args) { int [] numbers ={0,1,2,2,3,4,5}; int [] duplication = ...
  •  * 给你一根长度为n的绳子,把绳子剪成m段(m、n都是整数且m &gt; 1, n &gt; 1),m段绳子的长度依然是整数,求m段绳子的长度乘积最大多少?  * 比如绳子长度为8,我们可以分成2段、3段、4段...8段,只有...
  • 一个长度为n数组由负数0和正数组成,将其重新排列前面是负数中间是0后面是正数的结构,要求时间复杂度为n
  • 给定一个长度为n-1的整形数组,数字的范围1到n(无重复),其中有一个缺失的数字,写一段高效的程序找出该数字。 一、数组有序 对于该数组是否有序,题目没有说明,假设有序,则可使用二分查找,时间复杂度O...
  • 对于顺序存储的长度为N的线性表,访问结点和增加结点的时间复杂度: A.O(1), O(1) B.O(1), O(N) C.O(N), O(1) D.O(N), O(N) 答案:B 分析: 题目字眼 “ 顺序存储 ” ,说明内存单元中分配的存储空间是连续的,所 ...
  • 输入一个长度n的数组,将他排成...输出:数组长度n,依次输出升序后的数据 根据题目,先输入n,然后依次输入数据,题目要求是升序排序,很快想到了用最简单的冒泡排序法,时间复杂度 O(n^2),空间复杂度O(1)...
  • 面试题:  一个长度为n的整型有序数组,求这个
  • HashMap的长度为什么设置2的n次方

    万次阅读 2017-06-13 19:49:40
    1. 构造函数中控制长度必须2的n次方.首先构造方法中, 有下面这段代码, 其中initialCapacity是我们传入的自定义map容量大小(如果不设置, 默认是16) 如果我们自定义容量, 会执行下面这段代码 : ...
  • 问题描述:已知两个长度分别m 和 n 的升序链表,若将它们合并一个长度为 m+n 的降序链表,则最坏情况下的时间复杂度是(D) A.O(n)   B.O(m*n)   C.O(min(m,n))   D.O(max(m,n)) ...
  • 对于长度为N的数组,quick.sort()执行时,其最大的元素最多会被交换多少次,求解释
  • 有一道很经典的面试题:如何从一个长度为n的数组中找出前k个最小值/最大值?
  • 最近做项目发现,越是简单的...好了被绕晕没有,有的话思考一下这个问题,怎么创建一个长度为n的有序数组,像这样[0,1,2,3,4,5,…]。很简单的问题是不是你可能直接这样let arr = []for (let i = 0, len = 10; i ; i++
  • 已知长度为n的线性表A采用顺序存储结构,请写一个时间复杂度O(n)、空间复杂度O(1)的算法,该算法可删除线性表中所有值item的数据元素。
  • HashMap的长度为什么要是2的n次方

    万次阅读 多人点赞 2017-11-09 15:03:48
    HashMap为了存取高效,要尽量较少碰撞,就是要尽量把数据分配均匀,每个链表长度大致相同,这个实现就把数据存到哪个链表中的算法; 这个算法实际就是取模,hash%length,计算机中直接求余效率不如位移运算,源码...
  • 输入1 输出: 0 1   输入3: 输出: 000 001 010 011 100 101 110 111 实例实现一: //暴风影音 2013 校园招聘 笔试题 #include ...void print(unsigned int n
  • 牛客网上看到了这么道题给定一个长度为N的数组,找出一个最长的单调自增子序列(不一定连续,但是顺序不能乱) 例如:给定一个长度为8的数组A{1,3,5,2,4,6,7,8},则其最长的单调递增子序列为{1,2,4,6,7,8},长度...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,750,365
精华内容 700,146
关键字:

在长度为n的