遇到的比较好的算法 收藏一下

1、给定数据进行分组

public void Test1()
{
var dataList = new[] {"a1:b1:c1", "a1:b2:c2:d1:", "a2:b2:c2:d2"}; 
var root = new List<dynamic>();
 var dict = new Dictionary<string, dynamic>();//字典,方便搜索node 
foreach (var data in dataList) 
{ 
dynamic parent = null; 
foreach (var name in data.Split(':')) 
{ 
dict.TryGetValue(name, out var current); 
if (current != null) 
{ 
parent = current;
 continue;
 } 
var node = new {name, child = new List<dynamic>()}; 
if (parent == null)
 { 
root.Add(node);
 } 
else 
{
 parent.child.Add(node);
 } 
parent = node; 
dict.Add(name, node);
 }
 } 
Console.WriteLine(DefaultJsonSerializer.Instance.SerializeObject(root)); 
}

结果集合如下:

"[{"name":"a1", "child":[{"name":"b1", "child":[{"name":"c1", "child":[]}]},{"name":"b2", "child":[{"name":"c2", "child":[{"name":"d1", "child":[{"name":"", "child":[]}]},{"name":"d2", "child":[]}]}]}]},{"name":"a2", "child":[]}]"

2、动态规划法

题目描述:

你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。

给定一个代表每个房屋存放金额的非负整数数组,计算你在不触动警报装置的情况下,能够偷窃到的最高金额。(在力扣网站刷题见到的一个很好的解法思想)

示例: 输入: [2,7,9,3,1]
输出: 12
解释: 偷窃 1 号房屋 (金额 = 2), 偷窃 3 号房屋 (金额 = 9),接着偷窃 5 号房屋 (金额 = 1)。
  偷窃到的最高金额 = 2 + 9 + 1 = 12 。

public static int Rob(int[] nums)
        {
            int prevMax = 0;
            int currMax = 0;
            int temp = 0;
            foreach (var x in nums)
            {
                temp = currMax;
                currMax = Math.Max(prevMax + x, currMax);
                prevMax = temp;
            }
            return currMax;
        }

感觉比较好,记录一下;

posted @ 2019-11-25 15:42  你小子嚣张呀  阅读(153)  评论(0编辑  收藏  举报