我有一个键/值对列表,我需要检测列表中值与键匹配的链。
例如,从下面可能有 12、23、34 或 62、23、34
Key Value
1 2
3 4
2 3
6 2
多个值可以指向同一个键,但我需要为每个唯一的起点和终点存储不同的“链”。该列表可以按任何顺序排列。
我正在使用Java,但我有点坚持如何解决这个问题。
请帮忙!
创建一个Map<Integer, List<Integer>>
,将所有对存储在该映射中,然后迭代映射。
伪代码:
// 1st step
foreach(key, value){
if(!map.containsKey(key)){
map.put(key, new ArrayList());
}
map.get(key).add(value);
}
// 2nd step
foreach(entry /* of map */){
if(map.containsKey(entry.value)){
// print pairs
}
}
显然这是不会编译的伪代码,但它应该让你开始
由于这看起来像家庭作业,我会给你一些提示来帮助你自己解决问题,而不是给你一个完整的解决方案。
Map.get(key)
。Map.getKeys()
。如果您只想打印出链条,这就足够了。如果您想将链存储在一些不同的数据结构中,请提供更多信息。
递归!
import java.util.HashMap;
import java.util.Map;
public class Chain
{
private static Map< String , String > map;
public static void main( String args[] )
{
map = new HashMap< String , String >();
map.put( "1" , "2" );
map.put( "3" , "4" );
map.put( "2" , "3" );
map.put( "6" , "2" );
for ( String key : map.keySet() )
{
System.out.print( "(" + key + "," + map.get( key ) + ")" );
recurse( map.get( key ) );
System.out.println();
}
}
private static void recurse( String value )
{
if ( map.containsKey( value ) )
{
System.out.print( " (" + value + "," + map.get( value ) + ")" );
recurse( map.get( value ) );
}
}
}
为您提供以下输出:
(3,4)
(2,3) (3,4)
(1,2) (2,3) (3,4)
(6,2) (2,3) (3,4)