一,一维数组的动态和
输入:nums = [1,2,3,4]
输出:[1,3,6,10]
解释:动态和计算过程为 [1, 1+2, 1+2+3, 1+2+3+4] 。
public int[] RunningSum(int[] nums) {
for (int i = 1; i < nums.Length; i++)
{
nums[i] = nums[i] + nums[i - 1];
}
return nums;
}
二,不同整数的最少数目
给你一个整数数组 arr 和一个整数 k 。现需要从数组中恰好移除 k 个元素,请找出移除后数组中不同整数的最少数目。
输入:arr = [5,5,4], k = 1
输出:1
解释:移除 1 个 4 ,数组中只剩下 5 一种整数。
public int FindLeastNumOfUniqueInts(int[] arr, int k)
{
Dictionary<int, int> dic = new Dictionary<int, int>();
foreach (var item in arr)
{
if (dic.ContainsKey(item))
{
dic[item] = dic[item]+1;
}
else
{
dic.Add(item,1);
}
}
List<int> sorList = new List<int>(dic.Values);
sorList.Sort();
int i = 0;
while (k>0)
{
k = k - sorList[i];
if(k<0)
{
break;
}
i++;
}
return sorList.Count - i;
}
三,二维数组,计算最大的数组和是多少
private int[][] ints = new int[][] {new []{1, 2, 3}, new []{1, 2, 3}};
public float Add()
{
//GetLength(1)使用会报错
float max=0;
float bijiaoMax = 0;
for (int i = 0; i < ints.GetLength(0); i++)
{
if (bijiaoMax > max)
{
max = bijiaoMax;
}
bijiaoMax = 0;
for (int j = 0; j < ints[i].Length; j++)
{
bijiaoMax += ints[i][j];
}
}
Debug.Log(max);
return max;
}
四,链表的中间结点
给定一个头结点为 head 的非空单链表,返回链表的中间结点。
如果有两个中间结点,则返回第二个中间结点。
输入:[1,2,3,4,5]
输出:此列表中的结点 3 (序列化形式:[3,4,5])
//快指针q每次走2步,慢指针p每次走1步,当q走到末尾时p正好走到中间。
public ListNode MiddleNode(ListNode head) {
ListNode p = head, q = head;
while (q != null && q.next != null) {
q = q.next.next;
p = p.next;
}
return p;
}
五,字符串比较重复
给你两个字符串:ransomNote 和 magazine ,判断 ransomNote 能不能由 magazine 里面的字符构成。
如果可以,返回 true ;否则返回 false 。
magazine 中的每个字符只能在 ransomNote 中使用一次。
public bool CanConstruct(string ransomNote, string magazine)
{
if (ransomNote.Length > magazine.Length) {
return false;
}
int[] cnt = new int[26];
//cnt [ ch-‘a’ ]++ 遍历找出字符串的每个字符的重复的个数!
foreach (char c in magazine) {
cnt[c - 'a']++;
}
foreach (char c in ransomNote) {
cnt[c - 'a']--;
if (cnt[c - 'a'] < 0) {
return false;
}
}
return true;
}
六,移动零
给定一个数组nums,编写一个函数将所有0移动到数组末尾,同时保持非零元素的相对顺序
请注意 ,必须在不复制数组的情况下原地对数组进行操作。
public void MoveZeroes(int[] nums) {
int k = 0;
for (int i = 0; i < nums.Length; i++)
{
if (nums[i] != 0)
{
nums[k++] = nums[i];
}
}
while (k < nums.Length) {
nums[k++] = 0;
}
}
public class Solution {
public void MoveZeroes(int[] nums) {
int i = 0;
for (int j = 0; j < nums.Length; j++) {
//只要不为0就往前挪
if (nums[j] != 0) {
//i指向的值和j指向的值交换
int temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
i++;
}
}
}
}