408王道数据结构课后代码习题(七)

简介: 408王道数据结构课后代码习题(七)

2.2.3, 13


image.png


  • 找最小正整数,所以不需要管负数
  • 想法还是跟12题第一种解法一样,类似桶排序
  • 开一个新数组,下标对应元素值,值对应元素是否出现
  • 时间复杂度O(n),空间复杂度O(n),竟然已经是最优解了?


int find_miss_min(SqList list) {
  // 1.初始化一个全为0的数组
  int tmp[list.length] = {0};
  // 2.下标对应元素值,值对应元素是否出现
  for (int i = 0; i < list.length; i++) {
    if (list.data[i] > 0 && list.data[i] <= list.length)
      tmp[list.data[i]]++;
  }
  // 3.找到最小正整数
  int i;
  for (i = 1; i < list.length; i++) {
    if (tmp[i] == 0) 
      return i;
  }
  return i;
}
复制代码


2.2.3, 14

image.png


  • 暴力,直接三重循环!
  • 一个一个算,找到最小的
  • 时间复杂度O(n3),时间复杂度O(1)


int find_min_distance(int A[], int B[], int C[], int n1, int n2, int n3) {
  int dmin = INT_MAX, d;
  for (int i = 0; i < n1; i++) {
    for (int j = 0; j < n2; j++) {
      for (int k = 0; k < n3; k++) {
        // 计算距离
        d = abs(A[i] - B[j]) + abs(B[j] - C[k]) + abs(C[k] - A[i]);
        // 更新最小值
        if (d < dmin) dmin = d;
      }
    }
  }
  return dmin;
}
复制代码


  • 众所周知,绝对值体现的是数轴上的距离
  • 当 a=b=c 时,距离最小
  • 当 a<=b<=c 时,如图所示


image.png


  • 决定D大小的因素就是c和a的距离,所以我们每次固定c找一个使距离最小的a就可以了
  • 时间复杂度O(n),空间复杂度O(1)


// n1是否是三个数中的最小值
bool find_min(int n1, int n2, int n3) {
  if (n1 <= n2 && n1 <= n3) return true;
  return false;
}
int find_min_distance2(int A[], int B[], int C[], int n1, int n2, int n3) {
  int dmin = INT_MAX, d, i = 0, j = 0, k = 0;
  while(i < n1 && j < n2 && k < n3) {
    // 计算距离
    d = abs(A[i] - B[j]) + abs(B[j] - C[k]) + abs(C[k] - A[i]);
    // 更新最小值
    if (d < dmin) dmin = d;
    if (find_min(A[i], B[j], C[k])) i++;
    else if (find_min(B[j], C[k], A[i])) j++;
    else k++;
  }
  return dmin;
}
复制代码


  • 顺序表已经更完,明天继续更新链表
目录
相关文章
|
26天前
|
算法 开发者 计算机视觉
燃爆全场!Python并查集:数据结构界的网红,让你的代码炫酷无比!
在编程的世界里,总有一些数据结构以其独特的魅力和高效的性能脱颖而出,成为众多开发者追捧的“网红”。今天,我们要介绍的这位明星,就是Python中的并查集(Union-Find)——它不仅在解决特定问题上大放异彩,更以其优雅的设计和强大的功能,让你的代码炫酷无比,燃爆全场!
28 0
|
22小时前
|
算法 安全 NoSQL
2024重生之回溯数据结构与算法系列学习之顺序表习题精讲【无论是王道考研人还真爱粉都能包会的;不然别给我家鸽鸽丢脸好嘛?】
顺序表的定义和基本操作之插入;删除;按值查找;按位查找习题精讲等具体详解步骤以及举例说明
|
6天前
|
存储 Java 开发者
Java中的Map接口提供了一种优雅的方式来管理数据结构,使代码更加清晰、高效
【10月更文挑战第19天】在软件开发中,随着项目复杂度的增加,数据结构的组织和管理变得至关重要。Java中的Map接口提供了一种优雅的方式来管理数据结构,使代码更加清晰、高效。本文通过在线购物平台的案例,展示了Map在商品管理、用户管理和订单管理中的具体应用,帮助开发者告别混乱,提升代码质量。
16 1
|
21天前
|
存储 Java
数据结构第三篇【链表的相关知识点一及在线OJ习题】
数据结构第三篇【链表的相关知识点一及在线OJ习题】
23 7
|
16天前
|
存储 算法 索引
HashMap底层数据结构及其增put删remove查get方法的代码实现原理
HashMap 是基于数组 + 链表 + 红黑树实现的高效键值对存储结构。默认初始容量为16,负载因子为0.75。当存储元素超过容量 * 负载因子时,会进行扩容。HashMap 使用哈希算法计算键的索引位置,通过链表或红黑树解决哈希冲突,确保高效存取。插入、获取和删除操作的时间复杂度接近 O(1)。
25 0
|
21天前
05(数据结构考研)树相关操作代码
05(数据结构考研)树相关操作代码
26 0
|
21天前
|
算法
04(数据结构考研)串相关操作代码
04(数据结构考研)串相关操作代码
16 0
|
21天前
03(数据结构考研)队列相关操作代码
03(数据结构考研)队列相关操作代码
37 0
|
21天前
02(数据结构考研)栈相关操作代码
02(数据结构考研)栈相关操作代码
12 0
|
21天前
01(数据结构考研)线性表相关操作代码
01(数据结构考研)线性表相关操作代码
50 0