小算法,大思路,用最优代码阐述编码风格

//two_arg.cpp
//题目:两个有序数组,求是否有共同元素(假设是两个升序数组)。
//要求:时间复杂度:O(n),空间复杂度S(1)。
//算法描述:一次遍历,两个指针分别开始分别指向两个数组。循环控制为是否到两个数组的末尾
//每次循环比较两个指针指向的元素的大小,将小的指针后移,如果发现有相等则有共同元素。
//输出结果。
//**********************************************
//代码描述:

//2015-5-26

//**********************************************
 
#include<iostream>
using namespace std;
#define MAX 7

bool mycomp(const int *arg1, const int *arg2)//这里传参为const int*  当你的函数中并不是对地址中的
{                                            //元素进行修改操作时,注意控制权限不会引起错误,同时
    int i, j;                                //更加安全,健壮,方便理解。
    if(NULL != arg1&&NULL != arg2)               //这里if条件为执行频率较多的条件相对来说效率会高
    {                                            //
        for(i = 0, j = 0; i<MAX&&j<MAX; )
        {
            if(arg1[i] < arg2[j])
                ++i;                         //这里用++i而不用i++,是因为i++会在内存中产生中间变量
            else if(arg1[i] == arg2[j])      //存在表达式的值,和i的值。而++i则只存在i的值,也就是
                return true;                 //i的值就是表达式的值。
            else
                ++j;
        }
        return false;
    }
    else
    {
        cout <<"Err in args" << endl;
        exit(0);
    }
}
int main(void)
{
    int arg1[MAX] = {1, 4, 6, 7, 8, 9, 10};
    int arg2[MAX] = {2, 3, 5, 12, 23, 44, 55};

if(mycomp(arg1, arg2))                  //这里的返回值为bool,返回值可以实现链式表达式
        cout <<"Be same number" << endl;
    else
        cout <<"No same number" << endl;
    return 0;
}

//很简单的算法,每一步都用最优最高效率的方式去解决其中牵扯到的小的知识点是很多的,
//笔者自己学到了,碰到了,想到了就整理出来了,其中有些地方不足或者没有提到的欢迎指点,谢谢。
//当然,如果真的只是这么很小的程序完全可以写到主函数中,效率最高,但是这是一种习惯,
//也是一种风格,我们不能一味追求效率,忽略掉了语言的健壮性,复用性,伸缩性。当然,
//也可以强词夺理的说,就这么一段代码,效率再提高,也不会有什么影响。这种说法,不可否认
//是正确的,为了以后更好的工作,和做一个优秀的程序员,这是必须清楚的理解并且必须
//养成习惯。代码风格决定发展高度。。。。。。。。。。。。。。。。。。。

时间: 2024-12-28 09:49:20

小算法,大思路,用最优代码阐述编码风格的相关文章

使用OC语言编写两个超大数相乘或相加的算法的思路和超大正整数相乘的代码

正文: 在编程中,无论是OC还是C亦或是C++语言,所声明的整数变量都会在内存中占有固定的存储空间,而这些存储空间都是固定的. 比如我们知道的int.long.short.unsigend int.unsigend long.unsigend long long等等,都有固定的存储空间,而哪怕是64位系统下的变量unsigend long long,能存储的最大范围只有1844674407370955161. 下边复习一下基础类型的存储范围以及所占字节: 编程语言的基础类型速查表 char -1

大数据处理时的一种BitMap小算法

一种大数据外部排序(内存无法加载所有排序元素).去除重复元素.快速找到随机被删除元素的BitMap小算法,核心思想即通过将一个数作为下标(index)来索引一个bit表示一个数是否存在,排序时的时间复杂度为O(N),需要的额外空间的复杂度O(N/8),支持整个int范围(正负数都支持)的算法示例如下: char BitMask[] = {0x80 , 0x40 , 0x20 , 0x10 , 0x8 , 0x4 , 0x2 , 0x1}; int WriteNumberBitToByte(cha

[大数据性能调优] 第一章:性能调优的本质、Spark资源使用原理和调优要点分析

本課主題 大数据性能调优的本质 Spark 性能调优要点分析 Spark 资源使用原理流程 Spark 资源调优最佳实战 Spark 更高性能的算子 引言 我们谈大数据性能调优,到底在谈什么,它的本质是什么,以及 Spark 在性能调优部份的要点,这两点让直式进入性能调优都是一个至关重要的问题,它的本质限制了我们调优到底要达到一个什么样的目标或者说我们是从什么本源上进行调优.希望这篇文章能为读者带出以下的启发: 了解大数据性能调优的本质 了解 Spark 性能调优要点分析 了解 Spark 在资

[转]01分数规划算法 ACM 二分 Dinkelbach 最优比率生成树 最优比率环

01分数规划 前置技能 二分思想最短路算法一些数学脑细胞?问题模型1 基本01分数规划问题 给定nn个二元组(valuei,costi)(valuei,costi),valueivaluei是选择此二元组获得的价值(非负),costicosti是选择此二元组付出的代价(非负),设xi(xi∈{0,1})xi(xi∈{0,1})代表第ii个二元组的选与不选,最大(小)化下式 maximize(or minimize)   r=∑valuei?xi∑costi?ximaximize(or minim

【优化算法】Greedy Randomized Adaptive Search算法 超详细解析,附代码实现TSP问题求解

01 概述 Greedy Randomized Adaptive Search,贪婪随机自适应搜索(GRAS),是组合优化问题中的多起点元启发式算法,在算法的每次迭代中,主要由两个阶段组成:构造(construction)和局部搜索( local search). 构造(construction)阶段主要用于生成一个可行解,而后该初始可行解会被放进局部搜索进行邻域搜索,直到找到一个局部最优解为止. 02 整体框架 如上面所说,其实整一个算法的框架相对于其他算法来说还算比较简单明了,大家可以先看以

算法浅谈——分治算法与归并、快速排序(附代码和动图演示)

在之前的文章当中,我们通过海盗分金币问题详细讲解了递归方法. 我们可以认为在递归的过程当中,我们通过函数自己调用自己,将大问题转化成了小问题,因此简化了编码以及建模.今天这篇文章呢,就正式和大家聊一聊将大问题简化成小问题的分治算法的经典使用场景--排序. 排序算法 排序算法有很多,很多博文都有总结,号称有十大经典的排序算法.我们信手拈来就可以说上来很多,比如插入排序.选择排序.桶排序.希尔排序.快速排序.归并排序等等.老实讲这么多排序算法,但我们实际工作中并不会用到那么多,凡是高级语言都有自带的

算法大神之路----排序(冒泡排序法)

冒泡排序法 冒泡排序法又称为交换排序法,是由观察水中冒泡变化构思而成,气泡随着水深压力而改变.气泡在水底时,水压最大,气泡最小,而气泡慢慢浮上水面时,气泡所受压力最小,体积慢慢变大. 冒泡排序比较方式是从第一个元素开始,比较相邻的元素大小,如果大小顺序有误,则对调后进行下一个元素比较.直到所有元素满足关系为止. 冒泡排序法分析 冒泡排序法平均情况下,需要比较(n-1)/2次,时间复杂度为O(n2),最好的情况只需要扫描一次,不用操作,即作n-1次比较,时间复杂度为O(n). 由于冒泡排序为相邻两

小算法---寻找最小的不能由n个数选取求和的数

题目描述如下: 看到这个题目,最容易想到的是暴力搜索法.然而,那不是好的办法,也是acm无法通 过的办法. 思路分析:对于给定的数组,我们必须先对其进行小到大的排序.如果最小的数不是 1(大于1),输出的结果必然就是1啦.如果是1,通过当前数与前边所有数的和加1进 行比较,如果当前数小于等于前边数的和加1,那么当前数也是可以找到它的几个因数 的:否则,直接返回前边数的和加1.跳出循环的有两种情况,break和循环终止条件,如 果是终止条件出来的,那就是说明从1到数组中所有元素的和,都可以找到它的

排序算法的基本思想和OC代码实现

算法的基本思想和OC代码实现 一 .冒泡排序   (平均时间复杂度 o(N*N))  基本思想:两个数比较大小,较大的数下沉,较小的数冒起来. 过程:比较相邻的两个数据,如果第二个数小,就交换位置 从后向前两两比较,一直到比较最前两个数据.最终最小数被交换到起始的位置,这样第一个最小数的位置就排好了. 继续重复上述过程,依次将第2,3,….,n-1个最小数排好位置. int arr[5]={23,21,45,23,64}; int temp; for (int i=0; i<4; i++) {