局部最小值问题

2023-10-26

问题

一个数组,相邻不等。返回任意一个局部最小值。
(重点是 相邻不等,否则无法用此方法)

分析

所谓局部最小值,即左右相邻的数都比他大。当此数为第一个时,只需要右边的比他大即可。最右同理。

代码

生成随机数组,相邻不等

void Random_array(int* array, int num)
{
	for (int i = 0; i < num; i++)
		array[i] = rand() % 100;
}

void Print_array(int* a, int n)
{
	for (int i = 0; i < n; i++)
		printf("%d ,", a[i]);
	printf("\n");
}

void swap(int& a, int& b)
{
	int temp = a;
	a = b;
	b = temp;
}

int Array_del_nextsame(int array[])
{
	int num = N;
	for (int i = 0; i < N-2; i++)
	{
		if (array[i]==array[i+1])
		{
			num -= 1;
			for (int j = i; j < N - 1; j++)
				array[j] = array[j + 1];
		}
	}
	return num;
}

判断局部最小值

先判断第一个和最后一个数是否符合。
因为相邻不等,所以必有局部最小值。
从中间开始判断,二分法。

int One_min_index(int array[])
{

	if (N == 0)
		return -1;
	if (N == 1)
		return 0;
	if (array[0] < array[1])
		return 0;
	if (array[N - 1] < array[N - 2])
		return N - 1;

	int mid = 0, L = 0, R = N - 1;
	while (L <= R)
	{

		mid = (L + R) / 2;
		if (array[mid]<array[mid + 1] && array[mid] < array[mid - 1])
			return mid;
		if (array[mid - 1] < array[mid])
			R = mid - 1;
		if (array[mid] > array[mid + 1])
			L = mid + 1;

	}
}

完整代码

//P19 局部最小值问题,数组无序,但相邻两个元素不相等。
//题目要求 返回数组中一个局部最小值

#include <iostream>
using namespace std;
#define N 30		//N为数组长度,因为C+没有array.length,sizeof出问题还麻烦,所以偷懒
void Random_array(int* array, int num)
{
	for (int i = 0; i < num; i++)
		array[i] = rand() % 100;
}

void Print_array(int* a, int n)
{
	for (int i = 0; i < n; i++)
		printf("%d ,", a[i]);
	printf("\n");
}

void swap(int& a, int& b)
{
	int temp = a;
	a = b;
	b = temp;
}

int Array_del_nextsame(int array[])
{
	int num = N;
	for (int i = 0; i < N-2; i++)
	{
		if (array[i]==array[i+1])
		{
			num -= 1;
			for (int j = i; j < N - 1; j++)
				array[j] = array[j + 1];
		}
	}
	return num;
}

int One_min_index(int array[])
{

	if (N == 0)
		return -1;
	if (N == 1)
		return 0;
	if (array[0] < array[1])
		return 0;
	if (array[N - 1] < array[N - 2])
		return N - 1;

	int mid = 0, L = 0, R = N - 1;
	while (L <= R)
	{

		mid = (L + R) / 2;
		if (array[mid]<array[mid + 1] && array[mid] < array[mid - 1])
			return mid;
		if (array[mid - 1] < array[mid])
			R = mid - 1;
		if (array[mid] > array[mid + 1])
			L = mid + 1;

	}
}

int main()
{
	int array[N] = {};
	int num = 0;

	srand((unsigned int)time(NULL));
	for (int j = 0; j < 1000; j++)
	{
		Random_array(array, N);
		num=Array_del_nextsame(array);
		Print_array(array,num);
		printf("number of min=%d,min index=%d", One_min_index(array), array[One_min_index(array)]);	
		printf("\n================================================\n");
	}
	return 0;
}



//
//int main()
//{
//
//	int array[30] = { 92 ,11 ,93 ,14 ,34 ,79 ,95 ,12 ,56 ,65 ,45 ,67 ,25 ,14 ,2 ,72 ,5 ,17 ,33 ,85 ,60 ,92 ,49 ,41 ,5 ,12 ,94 ,45 ,57 ,81 };
//	Print_array(array,30);
//	printf("number of min=%d,min index=%d", One_min_index(array), array[One_min_index(array)]);	
//
//
//
//	return 0;
//}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

局部最小值问题 的相关文章

随机推荐

  • CH2-Java编程基础(7个案例实现)

    案例2 1 库房出入货物程序设计 案例介绍 任务描述 现要对华为和小米两种手机产品进行入库 本案例要求编写一个模拟商品入库的程序 可以在控制台输入入库商品的数量 最后打印出仓库中所有商品详细信息以及所有商品的总库存数和库存商品总金额 商品信
  • 斗地主发牌算法JAVA

    首先定义一个卡牌类 public class Card private String numb private String color private int index public Card public Card String nu
  • 【vue】使用了 keep-alive 的 include,但是切换 router-view,页面还是会刷新

  • 二分图最大匹配与最大独立集

    一 概念部分 1 什么是二分图 通俗的说法 就是可以把图分成两部分 每一部分任意两点之间没有关系 同一部落 两部分之间点可能存在多种关系 2 怎么判断二分图 1 理论判定 如果某个图为二分图 那么它至少有两个顶点 且其所有回路的长度均为偶数
  • Ansible-基本概述

    为什么要自动化运维 纯手动软件安装部署方式 我们以 10 台机器部署 Nginx 为例 部署步骤如下 1 通过 ssh 登录一台机器 2 yum install y nginx 或者 获取安装包自行编译安装 3 配置 Nginx 4 启动
  • 微信小程序知识点GET

    1 app json中的pages用来设置小程序包含哪些页面以及页面的路径 window用来设置默认页面的窗口表现形式 tabBar用来设置小程序底部tab的表现 2 app js中的App 函数用来注册一个小程序 接受的对象参数用来指定小
  • mstsc远程报:这可能是由于CredSSP 加密Oracle修正的两种完美解决方法

    win10很完美 用的也很舒服 当然人无完人 也总有不尽如人意的时候 比如说我们经常用的远程mstsc 就出现了一个坑 既然出现坑了 我们就得把坑解决掉吧 下面就记录一下这个坑的解决方法 本文地址 https www cnblogs com
  • vue.js --父子组件通信

    目录 父子组件通信 父组件向子组件通信 子组件通过props接收 子组件向父组件通信 emit自定义事件 v model改造 emit传递父组件数据 emit传递单个父组件数据 emit传递多个父组件数据 总结 父子组件通信 父子组件通信
  • 线程的状态

    线程共有六种状态 初始状态 实现Runnable接口和继承Thread可以得到一个线程类 new一个实例出来 线程就进入了初始状态 2 1 就绪状态 就绪状态只是说你资格运行 调度程序没有挑选到你 你就永远是就绪状态 调用线程的start
  • mybatis泛型DAO接口

    本文将记录mybatis整合spring的泛型DAO接口 通过BasicDAOImpl实现类提供CRUD功能 其他DAO只需要继承和扩展BasicDAOImpl BasicDao接口定义 public interface BasicDAO
  • win10系统下将DMG转为ISO镜像——(虚拟机黑苹果操作)

    1 下载镜像 http www msdn3 com 6 20190826 这个网站超级好用 2 下载后为dmg文件 如果可以直接下载iso文件的可以跳过转换步骤 3 dmg文件转iso文件 1 下载DMG2IMG 32位 64位版Windo
  • loadrunner接口压测脚本编写模板

    接口报文 Action web reg save param return code LB res code RB Search Body Ord 1 LAST lr start transaction httpRequest web ad
  • jdbc连接数据库mysql的问题_JDBC连接Mysql数据库出现的问题汇总

    MySQL 前言 最近安装了一个 mysql 8 0 版本的数据库 在程序中连接的时候可谓是状况不断 之前也会遇到一些问题 这里就对使用 JDBC 连接mysql 会出现的问题做一个汇总 在此之前说明一下环境 开发工具 IDEA mysql
  • Selenium自动化测试 —— 通过cookie绕过验证码的操作

    验证码的处理 对于web应用 很多地方比如登录 发帖都需要输入验证码 类型也多种多样 登录 核心操作过程中 系统会产生随机的验证码图片 进行验证才能进行后续操作 解决验证码的方法如下 1 开发做个万能验证码 推荐 2 测试环境关闭验证码功能
  • Easy Code插件使用(附Spring Data JPA生成模板)

    文章目录 一 概述 二 安装 1 安装插件 2 连接数据库 三 生成代码 四 配置EasyCode 五 Spring Data JPA模板 1 controller类 2 service接口 3 serviceImpl实现类 4 dao接口
  • Python之体育竞技分析

    来源 Python语言程序设计 嵩天 一 问题描述 需求 高手过招 胜负只在毫厘 如何科学地分析体育竞技比赛 输入 球员的水平 输出 预测比赛成绩 二 具体分析 三 代码实现 from random import random 生成随机数
  • uniapp picker实现:市区镇村4级懒加载

    使用这种方法的原因 市区镇村4级数据太大 后台接口响应时间太长 方法实现 样式 view
  • 深度学习各方向开源数据集分类汇总

    转载自 深度学习各方向开源数据集分类汇总 持续更新中 哔哩哔哩 目录 1 小目标检测 2 目标检测 3 人体姿态估计 4 图像分割 语义分割 5 工业检测 6 人脸识别 7 自动驾驶 8 目标跟踪 9 动作识别 10 图像分类 11 图像识
  • 基于Matlab的数字图像水印技术

    基于Matlab 的数字图像水印技术 课题介绍 数字水印技术涉及到许多图像处理算法以及数学计算工具等 如果用普通编程工具实现上述算法 需要要花费大量的时间 MathWorks公司推出的一种简单 高效 功能极强的高级语言 MATLAB语言 它
  • 局部最小值问题

    问题 一个数组 相邻不等 返回任意一个局部最小值 重点是 相邻不等 否则无法用此方法 分析 所谓局部最小值 即左右相邻的数都比他大 当此数为第一个时 只需要右边的比他大即可 最右同理 代码 生成随机数组 相邻不等 void Random a