上一页 1 2 3 4 5 6 7 ··· 17 下一页
思路分析:可以通过递归的方法实现调整:(1)将前n-m个元素的顺序颠倒。(2)将后面m个元素的顺序颠倒。(3)将n个元素的顺序全部颠倒。通过以上3个步骤的执行,就可以把数组的元素颠倒。代码如下:#include "stdafx.h"#include void func(int* start, int* end){ while (start < end) { int temp = *start; *start = *end; *end = temp; start++; end--; }}void f(int ... Read More
posted @ 2014-03-13 11:39 源子陌 Views(1249) Comments(0) Diggs(0) Edit
方法一:老盆友快速排序法,代码如下:#include "stdafx.h"#include #include int int_cmp(const void *a, const void *b){ const int *ia = (const int *)a; const int *ib = (const int *)b; return *ia - *ib;}void Unique_QuickSortMethod(int *arr, int elements){ //C语言自带的排序函数 qsort(arr, elements, sizeof(int), int_... Read More
posted @ 2014-03-13 10:18 源子陌 Views(3399) Comments(0) Diggs(0) Edit
思路分析:可以只通过一遍扫描数组即可找出数组中第二大的数,即通过设置两个变量来进行判断。首先定义一个最大变量来存储数组的最大值,初始值为数组首元素;另一个是第二大变量,用来存储数组中的第二大数,因其一定不能超过数组中的最大值,所以初始值可设为最小负整数-32767,然后遍历数组元素。如果数组元素的值比最大变量的值大,则将第二大变量的值更新为最大变量的值,最大变量的值更新为该元素的值;如果数组元素的值比最大变量的值小,则判断该数组元素的值是否比第二大变量的值大,如果大,则更新第二大变量的值为该数组元素的值。代码如下:#include "stdafx.h"#include co Read More
posted @ 2014-03-12 11:47 源子陌 Views(5245) Comments(2) Diggs(0) Edit
思路分析:首先通过快速排序,然后对排好序的数组设置主比较游标与辅比较游标,主比较游标初始化为下标0,辅比较游标则从下标1开始递增,挨个与第一个元素比较。在比较的过程中,若遇到相等的,则辅比较游标继续向后走,直到遇到不相等的,将主比较游标后移一位,此时主比较游标指向的元素值就是重复的,需要将其替换掉。然后将辅比较游标指向的元素值赋给主比较游标代表的元素值。重复这样的过程,直到所有的重复元素都比替换掉,此时主比较游标代表的就是去重后数组的最大下标,将其加一即为去重后数组的长度。代码如下:#include "stdafx.h"#include #include int int_c Read More
posted @ 2014-03-11 18:04 源子陌 Views(3618) Comments(0) Diggs(0) Edit
方法一:位图法,原理是首先申请一个长度为n且均为’0’组成的字符串,字符串的下标即为数组a[]中的元素,然后从头开始遍历数组a[N],取每个数组元素的值,将其对应的字符串中的对应位置置1,如果已经置过1,那么该数就是重复的数。由于采用的是位图法,所以空间复杂度比较大,为O(N).代码如下:#include "stdafx.h"#include #include bool xor_findDup(int * arr, int NUM){ int *arrayflag = (int *)malloc(NUM*sizeof(int)); int i = 1; while (i # Read More
posted @ 2014-03-11 00:04 源子陌 Views(2586) Comments(0) Diggs(0) Edit
思路分析:类似快速排序的处理。可以用两个指针分别指向数组的头和尾,头指针正向遍历数组,找到第一个偶数,尾指针逆向遍历数组,找到第一个奇数,使用引用参数传值交换两个指针指向的数字,然后两指针沿着相应的方向继续向前移动,重复上述步骤,直到头指针大于等于尾指针为止。代码如下:#include "stdafx.h"#include using namespace std;void Swap(int& a, int& b){ int temp = a; a = b; b = temp;}void ReverseArray(int arr[], int len){ if Read More
posted @ 2014-03-10 23:55 源子陌 Views(1448) Comments(0) Diggs(0) Edit
思路分析:尼玛这不就是等差数列么。首先将该n-1个整数相加,得到sum,然后用(1+n)n/2减去sum,得到的差即为缺失的整数。因为1~n一共n个数,n个数的和为(1+n)n/2,而未排序数列的和为sum,二者之差即为确实的数。程序示例如下:#include "stdafx.h"#include #define MAX 5int main(){ int array[MAX] = { 3, 2, 1, 6, 4 }; int i; int sum = 0; int temp; for (i = 0; i < MAX; i++) sum += i; temp = (MA Read More
posted @ 2014-03-10 16:59 源子陌 Views(436) Comments(0) Diggs(0) Edit
方法一:枚举法。该方法是最容易、也是最简单的方法,枚举出数组A和数组B中所有的元素对,判断其和是否为c,如果是,则输出。方法二:排序+二分查找法。首先,对两个数组中长度较大数组,不妨设为A,排序;然后,对于B中每个元素B[i]在A中二分查找c-B[i],如果找到,直接输出。方法三:排序+线性扫描法。首先,对A和B进行排序;然后用指针p从头扫描A,用指针q从尾扫描B,如果A[p]+B[q]==c,则输出A[p]+B[q],且p++,q--;如果A[p]+B[q]>c,则q--;否则p++。代码如下:#include "stdafx.h"#include void sor Read More
posted @ 2014-03-10 16:06 源子陌 Views(1236) Comments(0) Diggs(0) Edit
一个整数数组,元素取值可能是1~N(N是一个较大的正整数)中的任意一个数,相同数值不会重复出现。设计一个算法,找出数列中符合条件的数对,满足数对中两数的和等于N+1。方法一:蛮力法。这是最简单的方法,枚举出数组中所有可能的数对,看其和是否为N+1,如果是,则输出。但这种方法一般效率不高。代码如下:#include "stdafx.h"#include int findCouple(int a[], int n, int &val){ if (a == NULL || n max) max = a[m]; } for (int i = 0; i N+1,则back-- Read More
posted @ 2014-03-10 10:51 源子陌 Views(1525) Comments(0) Diggs(0) Edit
给定一个含有n个元素的整型数组array,其中只有一个元素出现奇数次,找出这个元素。思路分析:这道题一般人的第一反应都是遍历数组,将数组中每个元素出现的次数保存下来,然后遍历这些次数,返回奇数者。时间复杂度O(n2),累不累啊。因为对于任意一个数k,有k^k=0,k^0=k,所以将array中所有元素进行异或,那么个数为偶数的元素异或后都变成了0,只留下了个数为奇数的那个元素。酱紫的话时间复杂度只有O(n),多省事啊。程序示例如下:#include "stdafx.h"#include int FindElementWithOddCount(int* a, int n){ Read More
posted @ 2014-03-09 23:11 源子陌 Views(2354) Comments(0) Diggs(0) Edit
上一页 1 2 3 4 5 6 7 ··· 17 下一页