首页 > 编程语言 >挑战数据结构和算法面试题——最大间隔

挑战数据结构和算法面试题——最大间隔

时间:2023-06-14 20:38:21浏览次数:39  
标签:面试题 int max 间隔 算法 num ori 数据结构 margin

挑战数据结构和算法面试题——最大间隔_算法

分析:

本题首先需要理解清楚最大间隔的最小:

  • 最初的间隔为:[1,1,4,1],此时最大间隔为4
  • 删除2后的间隔为:[2,4,1],此时最大间隔为4
  • 删除3后的间隔为:[1,5,1],此时最大间隔为5
  • 删除7后的间隔为:[1,1,5],此时最大间隔为5

在删除元素后的间隔为:[4,5,5],最小值为:4

方法:

int get_min_max_margin(int *a, const int n) {
  int *margin_array = (int *)malloc(sizeof(int)*(n-1));
  int max_ori = 0;
  int *p = margin_array;
  for (int i = 0; i < n-1; i++) {
    int margin = a[i+1] - a[i]; // 计算当前的间隔
    if (margin > max_ori) max_ori = margin;// 纪录所有最大的间隔
    *p = margin;
    p ++;
  }
  // 开始计算
  int *q1 = margin_array;
  int min_num = max_ori + max_ori;
  for (int j = 0; j < n-2; j++) {
    int max_num = max_ori;
    int *q2 = q1 + 1;
    int margin_new = *q1 + *q2;
    if (margin_new > max_num) max_num = margin_new;
    if (min_num > max_num) min_num = max_num;
    q1 ++;
  }
  free(margin_array);
  return min_num;
}


标签:面试题,int,max,间隔,算法,num,ori,数据结构,margin
From: https://blog.51cto.com/u_16161414/6480392

相关文章

  • 挑战数据结构和算法——栈的push、pop序列
    题目来源“数据结构与算法面试题80道”。在此给出我的解法,如你有更好的解法,欢迎留言。问题分析:本题考查栈的基本操作,栈是一种“先进后出”的数据结构。判断一个序列是否是栈的pop序列是一种常见的问题,可以通过模拟push和pop的过程,push和pop总是成对出现的,如:方法:#definepush1#def......
  • 【数据结构和算法面试题】跳台阶问题
    题目来源“数据结构与算法面试题80道”。问题分析:假设为跳台阶的总跳法,当时,;当时,;当时,如果先跳1级台阶,有种方法,如果先跳2级台阶,有种方法,依次类推,可以得到下面的递推公式:方法:intget_kind(intn){ if(n<=0)return0; intresult; int*cal=(int*)malloc(sizeof(int)*n);......
  • 挑战数据结构和算法——整数的二进制表示中1的个数
    题目来源“数据结构与算法面试题80道”。在此给出我的解法,如你有更好的解法,欢迎留言。问题分析:本题涉及到二进制的处理,在本题使用到&操作和>>操作。方法:intget_num(intn){intnum=0;if(n<0){num+=1;n=n*(-1);}while(n!=0){......
  • 推荐系统中的常用算法——Wide & Deep
    1.概述在前DeepLearning时代,以LogisticRegression(LR)为代表的广义线性模型在CTR,CVR中得到了广泛的应用,主要原因包括:模型足够简单,相当于不包括隐含层的神经网络;可扩展性强;可解释性强,因为是线性的模型,可以很方便的显现出特征对最终结果的强弱。虽然线性模型有如上的优点,但同时也存在......
  • 【数据结构与算法面试题】二叉树节点的最大距离
    题目来源“数据结构与算法面试题80道”。问题分析:涉及的知识点是二叉树的遍历,遍历的方法主要有:先序遍历中序遍历后序遍历层次遍历在本题中,使用先序遍历的方法。方法:voidm_length(BSTreeNode*root,int*length,int*max_length){if(NULL==root||(NULL==root......
  • 机器学习算法实现解析——libFM之libFM的训练过程之Adaptive Regularization
    本节主要介绍的是libFM源码分析的第五部分之二——libFM的训练过程之AdaptiveRegularization的方法。5.3、AdaptiveRegularization的训练方法5.3.1、SGD的优劣在“机器学习算法实现解析——libFM之libFM的训练过程之SGD的方法”中已经介绍了基于SGD的FM模型的训练方法,SGD的方法的......
  • 推荐算法——非负矩阵分解(NMF)
    1.矩阵分解回顾在博文推荐算法——基于矩阵分解的推荐算法中,提到了将用户-商品矩阵进行分解,从而实现对未打分项进行打分。矩阵分解是指将一个矩阵分解成两个或者多个矩阵的乘积。对于上述的用户-商品矩阵(评分矩阵),记为,可以将其分解成两个或者多个矩阵的乘积,假设分解成两个矩阵和,......
  • 机器学习中的常见问题——K-Means算法与矩阵分解的等价
    一、K-Means算法的基本原理K-Means算法是较为经典的聚类算法,假设训练数据集XX为:{x1,x2,⋯,xn}{x1,x2,⋯,xn},其中,每一个样本xjxj为m......
  • 优化算法——坐标上升法
    一、坐标上升法算法原理坐标上升法(CoordinateAscent)每次通过更新函数中的一维,通过多次的迭代以达到优化函数的目的。假设需要求解的优化问题的具体形式如下:其中,是向量的函数。更新过程为每次固定除以外的参数,求得满足条件的,直到算法收敛,具体的算法过程如下所示:(图片来自参考文......
  • 数据结构和算法——旋转打印链表
    1、问题描述输入参数nn为正整数,如输入n=5n=5,则按行打印如下的数字:2、问题的理解这个问题是将数字1…n21…n2按照一圈一圈的方式......