Python找给定字典中键值循环的数据
代码
mapping={2: 4, 3: 9, 4: 4, 5: 8, 6: 2, 7: 5, 8: 11, 9: 1, 10: 10, 11: 5}
cycles = []
for key in mapping.keys(): #遍历每个key
if(key==mapping.get(key)):
single=[]
single.append(key)
cycles.append(single) #键值相等,记录
else:
m=[key] #记录闭环头键
v=mapping.get(key) #获取对应键的值
while v in mapping : #如果值也是键,则继续遍历
k=mapping.get(v)
if k < key or k==v or v in m: #已遍历或键值相同
break
m.append(v)
if(k==key): #形成闭环
m1=sorted(m)
if m1 not in cycles:
cycles.append(m)
break
v=k #遍历下一个
print('\nthe cycles given by the mapping are: ',cycles)
运行结果
java找给定哈希表中键值循环的数据
代码
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Set;
import java.util.SortedSet;
import java.util.TreeSet;
public class tess {
public static void main(String[] args) {
//20 11 2: 4, 3: 9, 4: 4, 5: 8, 6: 2, 7: 5, 8: 11, 9: 1, 10: 10, 11: 5
Map<Integer, Integer> map = new HashMap<Integer, Integer>();
map.put(2, 4);
map.put(3, 9);
map.put(4, 4);
map.put(5, 8);
map.put(6, 2);
map.put(7, 5);
map.put(8, 11);
map.put(9, 1);
map.put(10, 10);
map.put(11, 5);
Set<Object> cycles = new HashSet<>();
for (Integer key : map.keySet()) {
if (key == map.get(key)) {
Set<Integer> key1 = new HashSet<>();
key1.add(key);
cycles.add(key1);
} else {
SortedSet<Integer> m=new TreeSet<>();
m.add(key);
int v = map.get(key);
while (map.get(v) != null) {
int k = map.get(v);
if (k < key || k == v || m.contains(v))
break;
m.add(v);
if (k == key) {
if (!cycles.contains(m)) {
cycles.add(m);
}
break;
}
v = k;
}
}
}
System.out.println(cycles);
}
}