算法小题目

1、X=10,Y=85,D=30 (步长),X+N*D>=Y

public int solution(int X, int Y, int D) {
        if((Y-X)%D==0)
            return (Y-X)/D;
        else
            return (Y-X)/D+1;
}

 2、找出缺少的正整数

复制代码
public int F(int[] A)
        {
            int[] positive = new int[A.Length+1];
            int pIndex = 1;
            A = Xier(A);
            for (int i = 0; i < A.Length; i++)
            {
                if (A[i] >= 0)
                {
                    positive[pIndex] = A[i];// 第一个数0
                    pIndex++;
                }
            }

            for (int i = 0; i < positive.Length; i++)
            {
                if (i == positive.Length - 1)
                {
                    return positive[positive.Length - 1] + 1;
                }
                else
                {
                    if (positive[i] + 1 < positive[i + 1])
                    {
                        return positive[i] + 1;
                    }
                }
            }
            return positive[positive.Length-1]+1;
 }

public int[] Xier(int[] A)
        {
            for (int gap = A.Length; gap > 0; gap/=2)
            {
                for (int i = gap; i < A.Length; i++)
                {
                    int temp = A[i];
                    int j = i - gap;
                    while (j >= 0 && temp < A[j])
                    {
                        A[j + gap] = A[j];
                        j -= gap;
                    }
                    A[j + gap] = temp;
                }
            }
            return A;
        }
复制代码

 3、找出数组中不同值数量

复制代码
public int D(int[] A)
        {
            int count = 0;
            A = Xier(A);
            if (A.Length > 0)
            {
                count = 1;
                for (int i = 0; i < A.Length - 1; i++)
                {
                    if (A[i] != A[i + 1])
                    {
                        count++;
                    }
                }                
            }
            return count;
        }
复制代码

 4、求出A到B中有多少数可以 X%K==0

复制代码
public int S(int A,int B,int K)
        {
            //方法1 时间复杂度最高,超时
            //int index = 0;
            //for (int i = A; i <= B; i++)
            //{
            //    if (i % K == 0) { index++; }
            //}
            //return index;

            //方法2 时间复杂度(O(B-A)/K)
            //int flag = 0;
            //if (A % K == 0)
            //{
            //    flag = A;
            //}
            //else
            //{
            //    flag = (A / K + 1) * K;
            //}
            //int index = 0;
            //for (int i= flag; i <= B; i+=K)
            //{
            //    if (i % K == 0) { index++; }
            //}
            //return index;

            //方法3
            int i = B / K;
            int j = A / K;
            if (A % K == 0)
            {
                return i - j + 1;
            }
            else
            {
                return i - j;
            }
        }
复制代码

 

posted @   stonespawn  阅读(31)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示