control may reach end of non-void function [-Werror,-Wreturn-type] 错误记录
2016-07-12 16:18
851 查看
牛客网错误记录 三 :
题目: 统计一个排序数组中 某个数字出现的次数
如果不是排序数组,我们可以直接遍历,判断数字是否等于给定数字,等于则统计次数加1 。这样遍历的时间效率是o(n),因为是排序数组,可以使用二分查找法。二分查找就需要用到递归,写出如下代码后,在牛客网死活编译不过,在vs08上则可以运行,一直报下面的错误。
/solution.h:21:1: error: control may reach end of non-void function [-Werror,-Wreturn-type]
实现没有办法,查看别人的代码,才发现我只是没有在递归函数内部写 return 。。。。。。。
最后写下二分统计思路:
两个函数,找第一次出现的位置和最后一次出现的位置。寻找第一次出现的位置函数 递归结束的条件是 当中间索引项值等于给定数字 且 索引项等于0或者 索引项大于0且其前面的数字不等于给定项 。或者没有找到给定数字,前面索引项大于后面索引项的时候,也退出。
写递归函数首先要想清楚递归结束的条件,否则会越写越乱,另外,如果遇到很纠结的问题,比如编译通不过,不要和自己太较劲,可以参考别人的代码。
题目: 统计一个排序数组中 某个数字出现的次数
如果不是排序数组,我们可以直接遍历,判断数字是否等于给定数字,等于则统计次数加1 。这样遍历的时间效率是o(n),因为是排序数组,可以使用二分查找法。二分查找就需要用到递归,写出如下代码后,在牛客网死活编译不过,在vs08上则可以运行,一直报下面的错误。
/solution.h:21:1: error: control may reach end of non-void function [-Werror,-Wreturn-type]
实现没有办法,查看别人的代码,才发现我只是没有在递归函数内部写 return 。。。。。。。
<span style="background-color: rgb(255, 255, 255);">class Solution { public: int GetNumberOfK_first(vector<int> data ,int k, int start ,int end ) { if(start> end ) return -1 ; int mid = (start + end) /2 ; if( data[mid] == k){ if( ((mid - 1) >=0 && (data[mid -1] != k) )|| (mid == 0)){ return mid ; } else { end = mid -1 ; } } else if (data[mid] > k){ end = mid -1 ; }else{ start = mid +1 ; } <span style="color:#ff0000;">return GetNumberOfK_first(data , k,start ,end ); //这里不写return ,就会报上面的错误。</span> } int GetNumberOfK_last(vector<int> data ,int k,int start ,int end ){ if(start > end ) return -1 ; int mid = (start + end) /2 ; if( data[mid] == k){ if( (((mid + 1) <= end) && (data[mid +1] != k ) ) || (mid == end) ) return mid ; else { start = mid +1 ; } } else if (data[mid] > k){ end = mid -1 ; }else{ start = mid +1 ; } return GetNumberOfK_last(data , k,start ,end ); } int GetNumberOfK(vector<int> data , int k) { int length = data.size() ; if( length <= 0) return 0 ; int first = GetNumberOfK_first(data,k,0 ,length -1 ); int last = GetNumberOfK_last(data,k,0 ,length -1 ); if(first > -1 && last > -1) return last - first + 1; else return 0 ; } };</span>
最后写下二分统计思路:
两个函数,找第一次出现的位置和最后一次出现的位置。寻找第一次出现的位置函数 递归结束的条件是 当中间索引项值等于给定数字 且 索引项等于0或者 索引项大于0且其前面的数字不等于给定项 。或者没有找到给定数字,前面索引项大于后面索引项的时候,也退出。
写递归函数首先要想清楚递归结束的条件,否则会越写越乱,另外,如果遇到很纠结的问题,比如编译通不过,不要和自己太较劲,可以参考别人的代码。
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- 关于指针的一些事情
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- Lua中调用C++函数示例
- Lua教程(一):在C++中嵌入Lua脚本
- Lua教程(二):C++和Lua相互传递数据示例
- C++联合体转换成C#结构的实现方法
- C++高级程序员成长之路
- C++编写简单的打靶游戏
- C++ 自定义控件的移植问题
- C++变位词问题分析
- C/C++数据对齐详细解析
- C++基于栈实现铁轨问题
- C++中引用的使用总结
- 使用Lua来扩展C++程序的方法
- C++中调用Lua函数实例
- Lua和C++的通信流程代码实例
- C++的template模板中class与typename关键字的区别分析
- C与C++之间相互调用实例方法讲解