LeetCode数组与字符串基础训练
- 前言
数组
是数据结构中的基本模块之一。因为字符串
是由字符数组形成的,所以二者是相似的。大多数面试问题都属于这个范畴。- gitee网址:https://gitee.com/kittysmith5/csharp-learning-record
- 训练内容
- 寻找数组的中心索引
1 public class Solution { 2 public int PivotIndex(int[] nums) { 3 int sum = 0, left = 0; 4 for (int i = 0; i < nums.Length; i++) sum += nums[i]; 5 if (sum - nums[0] == 0) return 0; 6 for (int i = 1; i < nums.Length; i++) { 7 left += nums[i - 1]; 8 if (left == sum - nums[i] - left) return i;//left to equels right 9 } 10 return -1; 11 } 12 }
-
旋转矩阵
1 public void Rotate(int[][] matrix) 2 { 3 int matrixSize = matrix.Length; 4 int[][] transposed = new int[matrixSize][]; 5 for (int j = 0; j < matrixSize; j++) 6 { 7 int[] transposedRow = new int[matrixSize]; 8 for (int i = 0; i < matrixSize; i++) 9 {//数学规律推导 10 transposedRow[matrixSize - i - 1] = matrix[i][j]; 11 } 12 transposed[j] = transposedRow; 13 } 14 for (int i = 0; i < matrixSize; i++) 15 { 16 for (int j = 0; j < matrixSize; j++) 17 {//中转 18 matrix[i][j] = transposed[i][j]; 19 } 20 } 21 }
-
翻转字符串里的单词
1 using System.Text.RegularExpressions;//导入正则 2 public class Solution { 3 public string ReverseWords(string s) { 4 s = s.Trim(); 5 string[] ss = Regex.Split(s,"\\s+");//一个或多个空格或者tab 6 string sss = ""; 7 for (int i = ss.Length-1; i>0 ; i--) { 8 sss+=ss[i]+" "; 9 } 10 sss+=ss[0]; 11 return sss; 12 } 13 }
- 寻找数组的中心索引
-
总结-
这里有一些其他类似于数组的数据结构,但具有一些不同的属性:
字符串(已包含在本 LeetBook 中)
哈希表
链表
队列
栈
2.正如我们所提到的,我们可以调用内置函数来对数组进行排序。但是,理解一些广泛使用的排序算法的原理及其复杂度是很有用的。3.二分查找也是一种重要的技术,用于在排序数组中搜索特定的元素。
4.我们将用双指针技巧。想要灵活运用该技巧是不容易的。这一技巧也可以用来解决:
链表中的慢指针和快指针问题
滑动窗口问题
双指针技巧有时与贪心算法有关,它可以帮助我们设计指针的移动策略。
-