程序员面试必备宝典-《剑指offer》完整代码+思路总结之 找出数组中重复数字

程序员面试必备宝典-《剑指offer》“找出数组中重复数字 ” 完整代码+思路总结(c++实现)

励志于打造会说话的代码

有人说:我不是程序员,我就想知道怎么把你底下黑乎乎那一片代码玩起来,必须可以啊。

复制粘贴大家都会,只需要下一个vs(201几版本都ok)编译器, 全部粘进去,运行起来,你就可以让程序听你的**指挥**了。
那如果你懒不想下载软件(嘻嘻),只需要去LeetCode这个网站找到这道题,在后面的空白代码区选择(c++lang)把我下面的代码粘一半(从“class“开始粘一直粘到这个符号位置“ };”)就可以让程序运行起来啦!

今日总结
第一次的算法题的时候,想要最短时间实现代码,切记不要加进自己的任何思考,每一行都要完全遵照别人正确的代码并且理解转化成自己对这道题的固定思维模板
分析原因
因为在这个过程中代码稍微任性改掉哪怕一丢丢,你想象不到要去百度查找多少个问题,只为了修改那一丢丢丢bug,而且问题会越查越远,迷失在百度,找不回原来的路。因为每个人做算法题都有自己的代码习惯,变量顺序啊,参数设计啊,实现方法啊等等可能都不一样,就像装修房子,每个人的设计细节都不同,所以如果刚开始没经验的时候,就一定要专一的找对一个领路人,完全扒下来它所有的细节,以后成熟的时候再加入自己的设计。

// 最完整 且 最简洁的 c++代码实现(每一句代码都有它的价值

//**2020年3月26日(我自己的代码习惯)**
//**找出数组中重复的数字  时间复杂度:O(n) 空间复杂度:O(1)**
#include<iostream>
using namespace std;
class Solution {
public:
	bool duplicate(int nums[], int length, int* duplication) {
		//因为有数组传进来,数组长度length一定不存在小于零的情况
		if (length == 0)
			return false;
		//只要nums[i]上是i,就给它往下for循环
		for (int i = 0; i < length; i++) {
			//nums[i]上不是i,就循环到是i为止
			while (nums[i] != i) {
				int m = nums[i];
				if (nums[m] != m) {
					swap(nums[m], nums[i]);
					/*int temp = nums[i];
					nums[i] = nums[m];
					nums[m] = temp;*/
				}
				else {
					*duplication = m;
					return true;
				}

			}
		}
		return false;
	}
};
int main() {
	int nums[] = { 2,1,3,4,0,5,2, };
	int length = sizeof(nums) / sizeof(int);
	int duplication = 0;
	Solution s;
	s.duplicate(nums, length, &duplication);
	cout << duplication << endl;
	system(" pause");
	return 0;
}

代码详细思路都写在下面这篇文章里哦

欢迎大家查看我的这篇文章算法思路之找出数组里重复的数字
转载地址:https://blog.csdn.net/leefangsong/article/details/105093418

你可能感兴趣的:(代码会说话,梳理算法思路,数据结构与算法)