2021年7月13日星期二

算法-双指针

算法-双指针

 

    心灰尽,有发未全僧。

 

简介:算法-双指针

一、和为S 的两个数字

1、题目描述

在有序数组中找出两个数,使得和为给定的数 S。如果有多对数字的和等于 S,输出两个数的乘积最小的。

2、解题思路

使用双指针,一个指针指向元素较小的值,一个指针指向元素较大的值。指向较小元素的指针从头向尾遍历,指向较大元素的指针从尾向头遍历。

  • 如果两个指针指向元素的和 sum == target,那么这两个元素即为所求。
  • 如果 sum > target,移动较大的元素,使 sum 变小一些;
  • 如果 sum < target,移动较小的元素,使 sum 变大一些。

3、代码示例

 1 import java.util.ArrayList; 2 public class Solution { 3  public ArrayList<Integer> FindNumbersWithSum(int [] array, int sum) { 4   ArrayList<Integer> list = new ArrayList<>(); 5   int i = 0; 6   int j = array.length - 1; 7   while(i < j){ 8    if(array[i] + array[j] == sum){ 9     list.add(array[i]);10     list.add(array[j]);11     break;12    }else if(array[i] + array[j] < sum){13     i++;14    }else{15     j--;16    }17   }18   return list;19  }20 }

View Code

 二、和为S 的连续正数序列

1、题目描述

输出所有和为 S 的连续正数序列。例如和为 100 的连续序列有:

[9, 10, 11, 12, 13, 14, 15, 16][18, 19, 20, 21, 22]

2、解题思路

前缀和

对于求一个区间和,一贯的优化技巧是使用前缀和。比如:
图片说明
sum[i]表示前i个数的和。比如sum[1] = 1,表示前一个数的和为1sum[2] = 3, 表示前2个数的和为3。

现在我们要求区间[2,4]表示求第2,3,4个数的和,就等于sum[4] - sum[1] = 9

在代码中用一个变量来模拟这个前缀和。

 1 import java.util.ArrayList; 2 public class Solution { 3  public ArrayList<ArrayList<Integer> > FindContinuousSequence(int sum) { 4  ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>(); 5   for(int i = 1; i < sum; i++){ 6    int temp = 0; 7    int j = i; 8    while(temp < sum){ 9     temp += j;10     j++;11    }12    if(temp == sum){13     // 满足条件则拼装数据14     ArrayList<Integer> list = new ArrayList<Integer>();15     for(int k = i; k < j; k++){16      list.add(k);17     }18     result.add(list);19    }   20   }21   return result;22  }23 }

View Code

 三、翻转单词顺序列

1、题目描述

Input:"I am a student."Output:"student. a am I"

2、解题思路

借助一些Java 自带的API 就很容易实现。

 1 import java.util.*; 2  3 public class Solution { 4  public String ReverseSentence(String str) { 5   String[] split = str.split(" "); 6   List<Object> list = new ArrayList<>(); 7   StringBuilder sb = new StringBuilder(); 8   for(int i = 0; i < split.length; i++){ 9    list.add(split[i]);10   }11   Collections.reverse(list); // 借助集合翻转API12   Iterator<Object> iterator = list.iterator();13   while (iterator.hasNext()){14    sb.append(iterator.next()).append(" ");15   }16   return sb.toString().......

原文转载:http://www.shaoqun.com/a/874495.html

跨境电商:https://www.ikjzd.com/

笨鸟:https://www.ikjzd.com/w/2713

zen cart:https://www.ikjzd.com/w/1282

coles:https://www.ikjzd.com/w/2506


算法-双指针    心灰尽,有发未全僧。简介:算法-双指针一、和为S的两个数字1、题目描述在有序数组中找出两个数,使得和为给定的数S。如果有多对数字的和等于S,输出两个数的乘积最小的。2、解题思路使用双指针,一个指针指向元素较小的值,一个指针指向元素较大的值。指向较小元素的指针从头向尾遍历,指向较大元素的指针从尾向头遍历。如果两个指针指向元素的和sum==target,那么这两个元素即为所求。如果
DMM:https://www.ikjzd.com/w/2026
清晨的水乡周庄 犹如一幅天然的水墨画:http://www.30bags.com/a/416789.html
清晨的旺角:你见过这样的旺角吗 旺角街景图片大全:http://www.30bags.com/a/424031.html
清初旅行家金玉冈的杞园:http://www.30bags.com/a/225356.html
清道夫—竹笋 - :http://www.30bags.com/a/409715.html
三个黑人玩一个少妇 两个男人一个前面一个后面:http://lady.shaoqun.com/a/247877.html
口述:老婆被闺蜜洗脑后求我参与换妻:http://lady.shaoqun.com/a/70305.html
男朋友舌头在我花缝不停的来回添 吸住小核到抽搐:http://lady.shaoqun.com/m/a/247152.html
女人怎么才能找到好男人?:http://lady.shaoqun.com/a/419117.html
十大美女主播身陷桃色丑闻:http://lady.shaoqun.com/a/419118.html
如何把握亚马逊日本站新机会:https://www.ikjzd.com/articles/146589
又有大批卖家因关联被封号!你中招了吗?:https://www.ikjzd.com/articles/146588

没有评论:

发表评论

跨境电商资讯:外贸宣传平台有哪些(出口的

现在很多做外贸的人都非常关注 外贸企业怎么推广 ,而现在推广的途径和平台有很多,企业如果都做,成本和时间精力是一个问题,而且并不是所有的推广渠道都是有用的。今天云程网络就来为大家盘点几个有效的外贸推广渠道。 一、海外社交媒体营销 Facebook,领英等海外社交媒体营销在近几年得...