和为定值的两个数组元素
来源:互联网 发布:网络电视缴费 编辑:程序博客网 时间:2024/06/05 16:02
在数组中找到和为定值的两个数,返回数组下标。
这个题目就是一个排序的问题,但是不能改变数组,用快排的方式存储数组的索引值即可,上代码。
#include <iostream>#include <cstdlib>#include <cstring>#include <vector>using namespace std;void quicksort_index(int *arr, int *index, int low, int high){ if (low >= high) return; int i = low; int j = high; int tmp = index[j]; int val = arr[index[j]]; while (i < j) { while (i < j && arr[index[i]] <= val) i++; index[j] = index[i]; while (i < j && arr[index[j]] > val) j--; index[i] = index[j]; } index[i] = tmp; quicksort_index(arr, index, low, i-1); quicksort_index(arr, index, i+1, high);}void get_two_sum_index(int *arr, int *index_arr, int len, int two_sum, std::vector<int> &ivec){ int start_index = 0; int end_index = len; int i = 0; int j = 0; ivec.clear(); while (start_index < end_index) { i = index_arr[start_index]; j = index_arr[end_index]; if (two_sum == arr[i] + arr[j]) { ivec.push_back(i); ivec.push_back(j); start_index++; end_index--; } else if (two_sum > arr[i] + arr[j]) { start_index++; } else { end_index--; } }}int main(int argc, char *argv[]){ //int arr[] = {1, -2, 3, 10, -4, 7, 2, -5}; int arr[] = {102, 21, 39, 210, 94, 72, 2, 5, 167}; int len = sizeof(arr) / sizeof(int); std::cout << "array data" << std::endl; int *index_arr = new int[len]; int i = 0; for (i = 0; i < len; i++) { std::cout << arr[i] << " "; index_arr[i] = i; } std::cout << std::endl; quicksort_index(arr, index_arr, 0, len-1); for (i = 0; i < len; i++) { std::cout << arr[i] << " "; } std::cout << std::endl; for (i = 0; i < len; i++) { std::cout << arr[index_arr[i]] << " "; } std::cout << std::endl; int two_sum = 111; std::cout << "to get two sum: " << two_sum << std::endl; std::vector<int> ivec; get_two_sum_index(arr, index_arr, len-1, two_sum, ivec); std::vector<int>::iterator iter; int min_val; int max_val; for (iter = ivec.begin(); iter != ivec.end(); iter++) { std::cout << "[min_index, max_index]: " << *iter << ", "; min_val = arr[*iter]; iter++; max_val = arr[*iter]; std::cout << *iter << std::endl; std::cout << "[min_val, max_val]: " << min_val << " " << max_val << std::endl; } return 0;}
阅读全文
0 0
- 和为定值的两个数组元素
- 在排序数组中查找和为定值的两个元素
- 数组------寻找和为定值的两个数
- 在数组中,求和为定值的元素组合
- Java 列举数组中任意元素和为定值的组合
- 笔试面试之有序数组中查找和为定值的两个数
- 在数组中查找和为定值的两个数
- 从一个数组中找到和为定值的两个数
- 寻找数组中满足和为定值的两个数或所有可能组合
- 【Data Structure & Algorithm】在排序数组中查找和为定值的两个数
- 编程艺术之数组例题 2.2 寻找和为定值的两个数
- 作业:递归实现插入排序和在o(nlgn)时间复杂度内寻找和为定值的两个元素
- 在给定的数组中找出两个元素和为给定值的所有元素对
- 在给定的数组中找出两个元素和为给定值的所有元素对
- 寻找两个数的和为定值的算法
- 寻找和为定值的两个数
- 【剑指offer】和为定值的两个数
- 寻找和为定值的两个数
- Tomcat配置
- WinDbg快捷键
- json解析工具类
- 成为优秀Java程序员的10大技巧
- 递归,斐波那契数及其取模运算
- 和为定值的两个数组元素
- ◆考试题目◆◇NOIP模拟赛◇turtle(乌龟)
- 多线程安全和高效之无锁机制(CAS)和unsafe类
- 软件安装&yum源配置&第三方软件仓库的搭建
- JavaSE之数据类型与运算符
- 金融证书小整理
- SPring Hibernate 整合学习开发出现的错误
- 【NOIP2017提高A组冲刺11.2】救赎(数学期望)
- 可反复擦写5万次的手写板,竟然还能用橡皮擦能清除屏幕!