LeetCode 算法@001 -Two Sum

问题陈述:

Given an array of integers, find two numbers such that they add up to a specific target number.

The function twoSum should return indices of the two numbers such that they add up to the target, where index1 must be less than index2. Please note that your returned answers (both index1 and index2) are not zero-based.

You may assume that each input would have exactly one solution.

Input: numbers={2, 7, 11, 15}, target=9
Output: index1=1, index2=2

解决思路:

1.爆破法

使用两个嵌套for循环一对一求和与目标值判断,时间复杂度为O(n^2)

2.哈希表

将int数组存入hashMap,key为数值,value为其坐标.第一层遍历时,可以用n(1)的时间复杂度找到是否存在对应的第二个数。这样就将爆破法里面的第二层for循环的复杂度降低至O(1),总的时间复杂度降至O(n).

 

Java代码:

import java.util.HashMap;
public class twosum {
public static void main(String[] args){
int[] a={3,2,4};
int target=6;
int[] x=twoSum(a,target);
for(int y:x){System.out.println(y);}
}
public static int[] twoSum(int[] nums, int target) {
HashMap<Integer,Integer> map =new HashMap<Integer,Integer>();
int numLen = nums.length;
int[] res=new int[2];
for(int j=0;j<numLen;j++){
map.put(nums[j],j+1);
}
for(int i=0;i<numLen;i++){
int findIndex = target-nums[i];
if(map.containsKey(findIndex)&&map.get(findIndex)!=i+1) {
int foundIndex = map.get(findIndex);
if(foundIndex<(i+1)){res[0]=foundIndex;res[1]=i+1;}
else{res[1]=foundIndex;res[0]=i+1;}
break;
}
}
return res;
}
}

solrCloud常用命令记录

/admin/collections?action=CREATE: create a collection
/admin/collections?action=RELOAD: reload a collection
/admin/collections?action=SPLITSHARD: split a shard into two new shards
/admin/collections?action=CREATESHARD: create a new shard
/admin/collections?action=DELETESHARD: delete an inactive shard
/admin/collections?action=CREATEALIAS: create or modify an alias for a collection
/admin/collections?action=DELETEALIAS: delete an alias for a collection
/admin/collections?action=DELETE: delete a collection
/admin/collections?action=DELETEREPLICA: delete a replica of a shard
/admin/collections?action=ADDREPLICA: add a replica of a shard
/admin/collections?action=CLUSTERPROP: Add/edit/delete a cluster-wide property
/admin/collections?action=MIGRATE: Migrate documents to another collection
/admin/collections?action=ADDROLE: Add a specific role to a node in the cluster
/admin/collections?action=REMOVEROLE: Remove an assigned role
/admin/collections?action=OVERSEERSTATUS: Get status and statistics of the overseer
/admin/collections?action=CLUSTERSTATUS: Get cluster status
/admin/collections?action=REQUESTSTATUS: Get the status of a previous asynchronous request
/admin/collections?action=LIST: List all collections

solrCloud探索之概念解析

solrCloud是基于solr与zookeeper的的分布式搜索方案。它的中心思想是使用zookeeper作为集群的配置信息中心.

solrCloud具有如下特点:

  • 集中式的配置信息
  • 自动容错
  • 近实时搜索
  • 查询时自动负载均衡

而现在要说的是涉及自动容错的自动负载均衡的几个名词解析。

1.shard与Replica

英文中shard是碎片的意思.在solrCloud中它代表collection的某个分片.

shard是collection的逻辑分片,实际上承载shard的是分布在每个solr物理节点上的replica.

  • shard的作用是什么?

答:逻辑上通过创建多个shard,collection被均匀分布到不同的节点,通过子查询的方式实现了查询时负载均衡功能,提高了查询效率,能够有效减轻服务器的查询压力。

replica英文中是复制品的意思,在solrCloud中它代表shard的物理复制品.

真实环境下,shard是以Replica的形式存储在solrCloud节点机器上的。

  • replica的作用是什么?

答: 顾名思义,复制品当然可以有多份。在solrCloud的世界,shard可以被复制多份存储在不同的节点上。

shard与replica的关系就像是鬼故事里面鬼魂与肉身的关系.

replica不仅是shard的物理载体,它还能实现solrCloud的自动容错功能。

每个shard的多个replica要选举出一个leader.

选举replica leader的作用在于当建立索引时,文档会首先传给leader,然后由leader负责将文档路由给同shard的所有replica实现数据的同步。

  • collection的逻辑图示

solr2

在创建collection时可以通过设置numShards来指定shard的数目.

 

下图是实际操作的效果示例(solr节点地址因为隐私问题被覆盖):

比如创建一个名字为test05_collection的collection,分为4片,每片复制2份.

action=CREATE&name=test05_collection&numShards=4&replicationFactor=2&maxShardsPerNode=3

  • collection逻辑实例

 

 

solr1

 

在上图可以看到,collection被分为了4部分,每个部分被复制成2份放到了solrCloud的2台不同的节点上。