首页 > 编程语言 > 详细

C++ 算法(一)

时间:2021-04-13 17:26:42      阅读:13      评论:0      收藏:0      [点我收藏+]

在一个长度为n+1的数组里的所有数字都在1 ~n的范围内,所以数组中至少有一个数字是重复 的。从数组中找出任意一个重复的数字,但不能 修改输入的数组。如{2,3,5,4,3,2,6,7}得到2或者3

#include <iostream>
#include <vector>
using namespace std;

int duplicateInArray0(vector<int>& nums) {
	//暴力 n*n
	int n = nums.size();
	for (int i = 0; i < n - 1; i++)
	{
		for (int j = i + 1; j < n; j++)
		{
			if (nums[i] ^ nums[j] == 0)
				return nums[i];
		}
	}

	return 0;
}

int duplicateInArray(vector<int>& nums) {
	//二分 n* logn
	int l = 1, r = nums.size() - 1;
	while (l < r)
	{
		int mid = l + r >> 1; //[l, mid] [mid+ 1, r]
		int count = 0;
		for (int i = 0; i < nums.size(); i++)
		{
			if (nums[i] >= l && nums[i] <= mid)
				count++;
		}
		if (count > mid - l + 1) r = mid;
		else l = mid + 1;
	}
	return l;
}

int main()
{
	int a[8] = { 2, 3, 5, 4, 3, 2, 6, 7 };
	vector<int> nums;
	//将a的所有元素插入到b中
	nums.insert(nums.begin(), a, a + 9);
	cout << "暴力解答:" << duplicateInArray(nums) << endl;
	cout << "二分解答:" << duplicateInArray(nums) << endl;
	return 0;

}

  

C++ 算法(一)

原文:https://www.cnblogs.com/sunliyuan/p/14652814.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!