算法题中几个好用的方法

最近在刷一些算法题 然后在过程中会被难住
在看一些网上大佬的解析 其中有很多没见过的方法
在这里稍微总结一下
1.copy()
顾名思义 copy数组的方法
下面是一个例子
在这里插入图片描述

 public void Merge(int[] nums1, int m, int[] nums2, int n)
        {
            int len1 = m - 1;//num1的有效个数
            int len2 = n - 1;//num2的有效个数
            int len = m + n - 1;
            while (len1 >= 0 && len2 >= 0)
            {
                if (nums1[len1] > nums2[len2])
                {
                    nums1[len] = nums1[len1];
                    len1--;
                }
                else
                 {
                    nums1[len] = nums2[len2];
                    len2--;
                }
                len--;
            }
            Array.Copy(nums2, 0, nums1, 0, len2 + 1);
            // 表示将nums2数组从下标0位置开始,拷贝到nums1数组中,从下标0位置开始,长度为len2+1

2.OrderByDescending降序排列
利用扩展方法OrderByDescending对数组 字典等进行降序排序
3.ThenBy升序排列
利用扩展方法ThenBy对数组 字典等进行升序排序
4.Skip和Take
Skip()和Take()方法都是IEnumerable 接口的扩展方法,包括C#中的所有Collections类,如ArrayList,Queue,Stack等等,还有数组和字符串都可以调用这两个方法。
比如 testList里面是 1,2,3,4,5,6,7,8,9,10
var result = testList.Skip(5); //返回值就是 6,7,8,9,10;
var result = testList.Take(5); //返回值就是 1,2,3,4,5

下面给出一个例子
在这里插入图片描述

 public IList<string> TopKFrequent(string[] words, int k) {  
	 List<string> list = new List<string>();                     
 	 Dictionary<string, int> dic = new Dictionary<string, int>();
	  for (int i = 0; i < words.Length; i++)               
 	  {                
   		if (!dic.ContainsKey(words[i]))                
   		{                    
   			dic.Add(words[i], 1);               
   		 }
   		  else               
   		   {                    
   		   	dic[words[i]]++;                
   		   }
   	 }            
   	 var res = dic.OrderByDescending(s => s.Value).ThenBy(s => s.Key).Take(k).ToList();                       
   	 for (int i = 0; i < k; i++)            
   	 {              
   	  	 list.Add(res[i].Key);         
   	 }            
   	  return list;
}

5.split 字符串分割

  1. public string[] Split(params char[] separator)
    程序代码
    string[] split = words.Split(new Char[] { ‘,’ });//返回:{“1”,“2.3”,"",“4”}
    string[] split = words.Split(new Char[] { ‘,’, ‘.’ });//返回:{“1”,“2”,“3”,"",“4”}

  2. public string[] Split(char[] separator, int count)
    程序代码
    string[] split = words.Split(new Char[] { ‘,’, ‘.’ }, 2);//返回:{“1”,“2.3,4”}
    string[] split = words.Split(new Char[] { ‘,’, ‘.’ }, 6);//返回:{“1”,“2”,“3”,"",“4”}

  3. public string[] Split(char[] separator, StringSplitOptions options)
    程序代码
    string[] split = words.Split(new Char[] { ‘,’, ‘.’ }, StringSplitOptions.RemoveEmptyEntries);//返回:{“1”,“2”,“3”,“4”} 不保留空元素
    string[] split = words.Split(new Char[] { ‘,’, ‘.’ }, StringSplitOptions.None);//返回:{“1”,“2”,“3”,"",“4”} 保留空元素

  4. public string[] Split(string[] separator, StringSplitOptions options)
    程序代码
    string[] split = words.Split(new string[] { “,”, “.” }, StringSplitOptions.RemoveEmptyEntries);//返回:{“1”,“2”,“3”,“4”} 不保留空元素
    string[] split = words.Split(new string[] { “,”, “.” }, StringSplitOptions.None);//返回:{“1”,“2”,“3”,"",“4”} 保留空元素

  5. public string[] Split(char[] separator, int count, StringSplitOptions options
    程序代码
    string[] split = words.Split(new Char[] { ‘,’, ‘.’ }, 2, StringSplitOptions.RemoveEmptyEntries);//返回:{“1”,“2.3,4”} 不保留空元素
    string[] split = words.Split(new Char[] { ‘,’, ‘.’ }, 6, StringSplitOptions.None);//返回:{“1”,“2”,“3”,"",“4”} 保留空元素

  6. public string[] Split(string[] separator, int count, StringSplitOptions options)
    程序代码
    string[] split = words.Split(new string[] { “,”, “.” }, 2, StringSplitOptions.RemoveEmptyEntries);//返回:{“1”,“2.3,4”} 不保留空元素
    string[] split = words.Split(new string[] { “,”, “.” }, 6, StringSplitOptions.None);//返回:{“1”,“2”,“3”,"",“4”} 保留空元素

需要注意的是没有重载函数public string[] Split(string[] separator),所以我们不能像VB.NET那样使用words.Split(","),而只能使用words.Split(’,’)

发布了72 篇原创文章 · 获赞 73 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_44302602/article/details/104587115