h5网站建设作用,sem竞价开户,做网站的上海公司,wordpress教程下载地址题目1#xff1a;最小值
给定两个整数数组a和b#xff0c;计算具有最小差绝对值的一对数值#xff08;每个数组中取一个值#xff09;#xff0c;并返回该对数值的差
示例#xff1a; 输入#xff1a;{1, 3, 15, 11, 2}, {23, 127, 235, 19, 8} 输出#xff1a;3最小值
给定两个整数数组a和b计算具有最小差绝对值的一对数值每个数组中取一个值并返回该对数值的差
示例 输入{1, 3, 15, 11, 2}, {23, 127, 235, 19, 8} 输出3即数值对(11, 8) 解题思路
1.先对两个数组a和b进行升序排序
2.使用双指针分别用来遍历两个数组
3.将两个指针所指的数值进行比较将数值较小的向后移不断缩小差值
4.直到循环结束在这过程中如果遇到两个数值相等那么说明已经找到最小差值0了不用继续找下去了。 Code
class Solution {
public:int smallestDifference(vectorint a, vectorint b) {sort(a.begin(), a.end());sort(b.begin(), b.end());int pa 0; //a数组的下标int pb 0; //b数组的下标int na a.size(); // a的长度int nb b.size(); // b的长度long long minres LLONG_MAX; //保存最小差值while (pa na pb nb) {// 更新最小差值minres min(abs((long long)a[pa] - (long long)b[pb]), minres);// 数值较小的指针往后移逐渐缩小差值if (a[pa] b[pb]) {pa;}else if (a[pa] b[pb]) {pb;}else { // 若找到相等的两个数直接返回最小差值0即可return 0;}}return (int)minres;}
}; 题目2最大数字
编写一个方法找出两个数字a和b中最大的那一个。不得使用if-else或其他比较运算符。
示例 输入 a 1, b 2 输出 2 解题思路
因为题目要求不允许使用比较运算符以及if-else判断语句所以我们不能直接进行比大小
从数学公式上看我们可以通过公式计算出较大值 Code
class Solution {
public:int maximum(int a, int b) {//为了防止溢出先将两个int类型的整数转成long longlong ca;long db;int res(int)((fabs(c-d)cd)/2);return res;}
}; 还有一种方式使用 移位处理溢出
如果是负数右移32位结果为-1 a b: 1 (a - b) 31 0 a b: 1 (a - b) 31 1 Code
class Solution {
public:int maximum(int a, int b) {long c a, d b;//注意这里是long所以不是右移32位而是64位int k 1 ((c - d) 63);return k * a (!k) * b;}
};