《剑指OFFER》刷题笔记 —— 扑克牌顺子

LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张^_^)...他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的话,他决定去买体育彩票,嘿嘿!!“红心A,黑桃3,小王,大王,方片5”,“Oh My God!”不是顺子.....LL不高兴了,他想了想,决定大\小 王可以看成任何数字,并且A看作1,J为11,Q为12,K为13。上面的5张牌就可以变成“1,2,3,4,5”(大小王分别看作2和4),“So Lucky!”。LL决定去买体育彩票啦。 现在,要求你使用这幅牌模拟上面的过程,然后告诉我们LL的运气如何, 如果牌能组成顺子就输出true,否则就输出false。为了方便起见,你可以认为大小王是0。

ERROR:  VS 的错误提示 —— int (Solution::*) (const void* a, const void* b) 类型的实参与 int (_cdecl::*) (const void* , const void* ) 类型的形参不兼容

class Solution {
public:
  bool IsContinuous(vector<int> numbers) {
if (numbers.size() != )
return false;
//qsort(&numbers, numbers.size(), sizeof(int), compare);
qsort(&numbers[], numbers.size(), sizeof(int), compare);
//sort(numbers.begin(), numbers.end()); int numZeros = ;
int diff = ;
for (int i = ; i < numbers.size() - ; ++i) {
if (numbers[i] == )
++ numZeros;
else {
if (numbers[i] == numbers[i + ])
return false;
diff += numbers[i + ] - numbers[i] - ;
}
}
return (numZeros < diff) ? false : true;
}
  
  int compare(const void *a, const void *b) {
   return (*(int*)a - *(int*)b);
  } };

CORRECT:

int compare(const void *a, const void *b) {
  return (*(int*)a - *(int*)b);
} class Solution {
public:
  bool IsContinuous(vector<int> numbers) {
if (numbers.size() != )
return false;
//qsort(&numbers, numbers.size(), sizeof(int), compare);
qsort(&numbers[], numbers.size(), sizeof(int), compare);
//sort(numbers.begin(), numbers.end()); int numZeros = ;
int diff = ;
for (int i = ; i < numbers.size() - ; ++i) {
if (numbers[i] == )
++ numZeros;
else {
if (numbers[i] == numbers[i + ])
return false;
diff += numbers[i + ] - numbers[i] - ;
}
}
return (numZeros < diff) ? false : true;
}
  
};

注意:

C++ 排序请使用 sort(),不要使用 C 语言中的 qsort();

转一下 https://stackoverflow.com/questions/12308243/trying-to-use-qsort-with-vector 的大佬评论:

First of all, DON'T.

If you just want to muck about, you can replace iterators with actual pointers:

qsort(&numbers[0], numbers.size(), sizeof(int), compvar);

Apart from not doing all the work std::sort does, there is one unexpected thing about qsort. It is slower.

  1. sort (myvector1.begin(), myvector1.end());

  2. sort (myvector2.begin(), myvector2.end(), myfunction);

  3. sort (myvector3.begin(), myvector3.end(), myobject);

  4. qsort(&myvector4[0], myvector4.size(), sizeof(int), cmyfunction);

4 is the slowest, followed by 2 (function pointer passed to std::sort). 1 and 3 (default and functor) are the fastest (compiled with gnu's g++ with -O3 flag).

C++ qsort() 函数调用时实参与形参不兼容的问题解决的更多相关文章

  1. C/C++中的实参和形参

    今天突然看到一道关于形参和实参的题,我居然不求甚解.藐视过去在我的脑海里只有一个参数的概念,对于形参和实参的区别还真的不知道,作为学习了几年C++的人来说,真的深深感觉对不起自己对不起C++老师  T ...

  2. 《JS权威指南学习总结--8.3 函数的实参和形参》

    内容要点: 一.可选形参 当调用函数的时候传入的实参比函数声明时指定的形参个数要少,剩下的形参都将设置为undefined值. 例如: //将对象o中可枚举的属性名追加至数组 //如果省略a,则创建一 ...

  3. Python 入门基础9 --函数基础2 实参与形参

    今日内容: 一.函数参数 1.形参与实参定义 2.实参分类 3.形参分类 4.可变参数的整体使用 一.形参与实参定义 def fn(参数们): pass 1.1 形参 定义函数,在括号内声明的变量名, ...

  4. C语言学习笔记 (003) - C/C++中的实参和形参(转)

    今天突然看到一道关于形参和实参的题,我居然不求甚解.藐视过去在我的脑海里只有一个参数的概念,对于形参和实参的区别还真的不知道,作为学习了几年C++的人来说,真的深深感觉对不起自己对不起C++老师  T ...

  5. C++函数调用时的参数传递-3中传递方式

    参数传递即实参向形参传递信息,使形参获得对应的存储空间及初值,C++中函数传递主要有3种方式: 1.按值传递. 以按值传递方式进行参数传递的过程为:首先计算出实参的值,然后给它所对应的形参变量分配存储 ...

  6. C/C++中的实参和形参,重点以及盲点,自己以前未知的

    C/C++中的实参和形参   今天突然看到一道关于形参和实参的题,我居然不求甚解.藐视过去在我的脑海里只有一个参数的概念,对于形参和实参的区别还真的不知道,作为学习了几年C++的人来说,真的深深感觉对 ...

  7. Java实参和形参与传值和传引用

    实参和形参的定义: 形参出现函数定义中,在整个函数体内都可以使用,离开函数则不能使用. 实参出现在主函数中,进入被调函数后,实参变量也不能使用. 形参和实参的功能是做数据传送.发生函数调用时,主调函数 ...

  8. C/C++函数调用时传参过程与可变参数实现原理

    C/C++函数调用时传参过程与可变参数实现原理 C语言的经典swap问题 在学习C语言的时候,我们大都遇到过一些经典例题,这些经典例题背后所代表的是往往是C/C++背后的一些运行原理,比如下面这个示例 ...

  9. python函数调用时参数传递方式

    python函数调用时参数传递方式 C/C++参数传递方式 对于C程序员来说,我们都知道C在函数调用时,采用的是值传递,即形参和实参分配不同的内存地址,在调用时将实参的值传给实参,在这种情况下,在函数 ...

随机推荐

  1. utf8、ansii、unicode编码之间的转换

    #include "stdafx.h"#include "windows.h"#include <iostream>#include <str ...

  2. 高性能可扩展MySQL数据库设计及架构优化 电商项目(慕课)第3章 MySQL执行计划(explain)分析

    ID:相同就从上而下,不同数字越大越优先

  3. 你所不知道的js的小知识点(1)

    1.js调试工具 debugger <div class="container"> <h3>debugger语句会产生一个断点,用于调试程序,并没有实际功能 ...

  4. 三十一、MySQL 及 SQL 注入

    MySQL 及 SQL 注入 如果您通过网页获取用户输入的数据并将其插入一个MySQL数据库,那么就有可能发生SQL注入安全的问题. 本章节将为大家介绍如何防止SQL注入,并通过脚本来过滤SQL中注入 ...

  5. 【Ecshop】v2.7.3模板变量标签改进

    改进代码后虽可解决大多数函数参数的问题,但也同样产生了参数问题:ecshop模板函数参数有部分没有被引号包裹,所以正则并不能匹配到,要修改为引号包裹,那是个大工程. 为了使ecshop模板支持date ...

  6. 用express框架实现反向代理

    目前很多公司开发都是前后台分离开发,于是我用node起了一个服务,用node中的express框架实现了反向代理.(通俗易懂的讲就是我在我的电脑访问不到后台同事的电脑接口,这样做以后就可以在我本地访问 ...

  7. 【PHP】常用的PHP正则表达式收集整理

    匹配中文字符的正则表达式: [\u4e00-\u9fa5]评注:匹配中文还真是个头疼的事,有了这个表达式就好办了 匹配双字节字符(包括汉字在内):[^\x00-\xff]评注:可以用来计算字符串的长度 ...

  8. Codeforces Round #460 (Div. 2)-D. Substring

    D. Substring time limit per test3 seconds memory limit per test256 megabytes Problem Description You ...

  9. Codeforces Round #460 (Div. 2)-A. Supermarket

    A. Supermarket time limit per test2 seconds memory limit per test256 megabytes Problem Description W ...

  10. RDD算子、RDD依赖关系

    RDD:弹性分布式数据集, 是分布式内存的一个抽象概念 RDD:1.一个分区的集合, 2.是计算每个分区的函数 ,    3.RDD之间有依赖关系 4.一个对于key-value的RDD的Partit ...