您现在的位置是:主页 > news > 男女做污的事情网站视频/手机网站模板下载
男女做污的事情网站视频/手机网站模板下载
admin2025/6/28 13:12:14【news】
简介男女做污的事情网站视频,手机网站模板下载,新浪博客seo,公司的网址是什么1. 前言 本文的一些图片, 资料 截取自编程之美 2. 问题描述 3. 问题分析 对于这个问题, 我们常规的思路无非又是百无一变的穷举。。 解法一 : 穷举, 穷举出数组中任意两个数字的组合, 然后判断二者之和是否为给定的值 解法二 : 先将数组进行排序, 然后遍历所有小于 (给定的…
1. 前言
本文的一些图片, 资料 截取自编程之美
2. 问题描述
3. 问题分析
对于这个问题, 我们常规的思路无非又是百无一变的穷举。。
解法一 : 穷举, 穷举出数组中任意两个数字的组合, 然后判断二者之和是否为给定的值
解法二 : 先将数组进行排序, 然后遍历所有小于 (给定的值/ 2), 如果在另一半中能够找到 (给定的值 - 当前值), 那么则说明, <当前值, 给定的值 - 当前值> 即为所求, 如果给定的值为偶数的话, 需要对数组中是否存在两个(给定的值/ 2) 进行特殊处理
解法三 : 先将数组进行排序, 然后创建两个索引 left, right, 初始化left指向0, right指向arr.length-1, 如果 arr[left] + arr[right] < 给定的值, 那么left递增, 如果arr[left] + arr[right] > 给定的值, right递减, 如果相等, 则 arr[left], arr[right] 即为所求
分析 : 因为数组是有序的所以left, right 指向的数字是arr[left, …, right]中最小的和最大的数字, 如果arr[left] + arr[right] < 给定的值, 则说明 arr[left] + right索引左边的数字必然会小于给定的值, 所以这时候, 更新left索引, 对于问题的解不会有影响
对于arr[left] + arr[right] > 给定的值的情况, 同理
4. 代码
/*** file name : Test17FindTwoNumberStasficationCondition.java* created at : 5:17:25 PM May 23, 2015* created by 970655147*/package com.hx.test03;public class Test18FindTwoNumberStasficationCondition {// 从数组中找到两个元素和为sum的元素public static void main(String []args ) {// int sum = 43;int sum = 134;int[] intArr = {47, 91, 18, 63, 25, 44, 86, 69, 97, 74, 15, 54, 91, 66, 52, 13, 67, 3, 67, 43, 6, 94, 65, 77, 7, 81, 30, 6, 99, 64 };// findTwoNumberStasficationCondition01(intArr, sum);
// Log.horizon();
// findTwoNumberStasficationCondition02(intArr, sum);
// Log.horizon();findTwoNumberStasficationCondition03(intArr, sum);}// 穷举public static void findTwoNumberStasficationCondition01(int arr[], int sum) {for(int i=0; i<arr.length; i++) {for(int j=i+1; j<arr.length; j++) {if(arr[i] + arr[j] == sum) {Log.log(arr[i], arr[j]);}}}}// 先对arr进行排序, 在对小于half的元素进行遍历 查找arr中是否存在(sum - arr[i]) 如果存在 则打印出来// 最后 如果sum为偶数 则校验是否存在两个half元素// 对数据的保存 可以采用hashMap 或其他更快的数据结构 来提升效率public static void findTwoNumberStasficationCondition02(int arr[], int sum) {Arrays.sort(arr);int half = (sum + 1) >> 1;for(int i=0; (i<arr.length) && (arr[i]<half); i++) {int target = sum - arr[i];int idx = Arrays.binarySearch(arr, target);// .. 我去 这idx返回的值真怪,,,if(idx >= 0) {Log.log(arr[i], target);}}if((sum & 1) == 0) {int idx = Arrays.binarySearch(arr, half);if((arr[idx + 1] == half) || (arr[idx - 1] == half) ) {Log.log(half, half);}}}// 先对arr进行 排序// 在从开始 和结尾开始遍历 // 如果二者之和小于sum 则增加start// 如果二者之和小于sum 则减小end// 否则 打印数据 更新start, endpublic static void findTwoNumberStasficationCondition03(int arr[], int sum) {Arrays.sort(arr);int start = 0, end = arr.length - 1;while(start < end) {int res = arr[start] + arr[end];if(res > sum) {end --;} else if(res < sum) {start ++;} else {Log.log(arr[start], arr[end]);start ++;end --;}} }}
5. 运行结果
6. 总结
这个题也是非常经典的一道题目
注 : 因为作者的水平有限,必然可能出现一些bug, 所以请大家指出!