U3d力扣基础刷题-1

一,一维数组的动态和

输入: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++;
            }
        }
    }
}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值