算法分析与设计第二次作业总结

本来以为这门课没啥学的,结果还是自己太大意,还有很多东西不会...

1.4.2:防止两个大的int相加溢出,只要在第一个int前面加一个强制类型转换(long)即可,后面的加法运算就会按照最小精度(long)来进行。

1.4.4的这个三重循环还有点问题。

1.4.5的g题也不太明白

1.4.8学到了java的二分查找,binarysearch.rank()

1.4.15学到了两头逼近的查找技巧,大了high--小了low++,以及其拓展版本ThreeSumFaster

using System;

namespace _1._4._12
{
    /*
     * 1.4.12
     * 
     * 编写一个程序,有序打印给定的两个有序数组(含有 N 个 int 值) 中的所有公共元素,
     * 程序在最坏情况下所需的运行时间应该和 N 成正比。
     * 
     */
    class Program
    {
        static void Main(string[] args)
        {
            int[] a = new int[4] { 2, 3, 4, 10 };
            int[] b = new int[6] { 1, 3, 3, 5, 10, 11 };

            //2N 次数组访问,数组 a 和数组 b 各遍历一遍
            for (int i = 0, j = 0; i < a.Length && j < b.Length; )
            {
                if (a[i] < b[j])
                {
                    i++;
                }
                else if (a[i] > b[j])
                {
                    j++;
                }
                else
                {
                    Console.WriteLine($"Common Element:{a[i]}, First index: (a[{i}], b[{j}])");
                    i++;
                    j++;
                }
            }

        }
    }
}

猜你喜欢

转载自www.cnblogs.com/legendcong/p/9764123.html