取值为[1,n-1]含n个元素的整数数组,至少存在一个重复数,即可能存在多个重复数,O(n)时间内找出其中任意一个重复数,不使用额外存储空间。
2024-08-28 09:06:43
有一种非常诡异的算法,就是采用类似于单链表是否存在环的问题。“判断单链表是否存在环”是一个非常经典的问题,同时单链表可以采用数组实现,此时每个元素值作为next指针指向下一个元素。本题可以转换化为“已知一个单链表中存在环,找出环的入口点”这种想法。具体思路如下:将array[i]看作第i个元素的索引,即array[i]——>array[array[i]]——>array[array[array[i]]]——>array[array[array[array[i]]]]——>....最终形成一个单链表,由于数组a中存在重复元素,则一定存在一个环,且环的入口即为重复元素。所以先要找到环中的某个点,再找到环的入口点。
该题的关键在于,数组array的大小是n,而元素的范围是[1,n-1],所以array[0]不会指向自己,进而不会陷入错误的自循环。如果元素的范围中包含0,则该题不可直接采用该方法。程序示例代码如下:
#include "stdafx.h"
#include <stdio.h> int FindInteger(int array[], int n)
{
int x, y;
x = y = 0;
do
{
x = array[array[x]];
y = array[y];
} while (x != y);
x = 0;
do
{
x = array[x];
y = array[y];
} while (x != y);
return x;
}
int main()
{
int array[] = { 1, 3, 2, 4, 5, 4 };
int length = sizeof(array) / sizeof(array[0]);
printf("%d\n", FindInteger(array, length));
getchar();
return 0;
}
效果如图:
最新文章
- MySQL Performance-Schema(三) 实践篇
- 利用联合双边滤波或引导滤波进行升采样(Upsampling)技术提高一些耗时算法的速度。
- Unknown lifecycle phase ";mvn";. You must specify a valid lifecycle phase or a goal in the format <;plugin-prefix>;:<;goal>; or <;plugin-group-id>;:<;plugin-artifact-id>;[:<;plugin-version>;]:<;goal>;
- 【工匠大道】将项目同时托管到Github和Git@OSC
- 如何正确接收 GitHub 的消息邮件
- fibonacci数列从a到b的个数
- 整理了一些常用的jQuery动画事件
- Professional iOS Network Programming Connecting the Enterprise to the iPhone and iPad
- 关于PIL库的一些概念
- python是如何进行内存管理的
- RocketMQ
- [IR] Dictionary Coding
- 无法将参数 1 从“WCHAR [256]”转换为“const char *”
- Servlet的请求转发和重定向
- C语言分割字符串函数strtok
- Docker默认存储路径修改
- java 文件类 null与exists()是不一样的
- Given a binary tree, return the level order traversal of its nodes&#39; values. (ie, from left to right, level by level). For example: Given binary tree {3,9,20,#,#,15,7}, 3 / \ 9 20 / \
- PJzhang:工作之余一起来看剧
- Java File类 mkdir 不能创建多层目录,如果是多层,可以调mkdirs
热门文章
- 软件开发常用的linux命令心得
- 微信扫码支付.net版本
- PinnedListView分析二
- 总结一些笔记上的C和C++知识点
- Linux 内核版本,Ubuntu版本的查看
- PHP CURL POST提交
- Linux之查看切换Shell
- Opengl绘制我们的小屋(二)第一人称漫游
- (笔记)Linux下C语言实现静态IP地址,掩码,网关的设置
- Error configuring application listener of class org.springframework.web.context.ContextLoaderListener