zoukankan      html  css  js  c++  java
  • 1 两数之和

    两数之和

    1.个人思路

    • 1.情景假设

    一天,班主任布置了一个任务:给所有的小朋友都发了一个牌子,每个牌子上都有一个数字,
    谁找到两个牌子合起来的数字等于老师的牌子,那么可以赢的一个苹果。

    这个时候小朋友,如果你是小朋友。肯定先看自己牌子的数字,然后在看看老师牌子的数字,
    找数学老师算出需要的数字,然后去看看谁的牌子是X号

    • 2.过程分析

    先看自己牌子的数字 ---> 取一个数字
    在看看老师牌子的数字,找数学老师算出需要的数字 ---> 计算查找的值
    去看看谁的牌子是X号 ---> 去查找

    • 3.优化

    小朋友突然所有的小朋友都要去找数学老师算数字
    那么我让数学老师记下我的数字,如果有其他小朋友符合,让他来找我不就好了
    让数学老师记下我的数字 ---> 用字典记录已经找过的值

       

    2.代码实现

    方法一

        ` // 计算需要查找的值
            int findNum = target - nums[0];
            for(int i = 0; i < nums.Length; i++)
            {
                // 选择的值不需要查找
                if(i == 0)
                {
                    continue;
                }
                // 找到需要的值
                if(findNum == nums[i])
                {
                    arr[0] = 0;
                    arr[1] = i;
                }
            }`

    `       int[] arr = new int[2];
            int len = nums.Length;
    
            for (int i = 0; i < len; i++)
            {
                // 计算需要查找的值
                int findNum = target - nums[i];
                for (int j = 0; j < len; j++)
                {
                    // 选择的值不需要查找
                    if (i == j)
                    {
                        continue;
                    }
                    // 找到需要的值
                    if (findNum == nums[j])
                    {
                        arr[0] = i;
                        arr[1] = j;
                        break;
                    }
                }
            }`

    方法二

     `      Dictionary<int, int> numDict = new Dictionary<int, int>();
            int len = nums.Length;
    
            int[] arr = new int[2];
            for (int i = 0; i < len; ++i)
            {
                // 找到需要的值
                if (numDict.ContainsKey(nums[i]))
                {
                    arr[0] = i;
                    arr[1] = numDict[nums[i]];
                    break;
                }
                // 计算需要查找的值
                int findNum = target - nums[i];
                // 保存计算出来的值
                if (!numDict.ContainsKey(findNum))
                {
                    numDict.Add(findNum, i);
                }
    
            }`
  • 相关阅读:
    ActionBar Fragment的一个sample activity; 及获取runningAppProcess及跳转
    优化后台推送的service,减少被杀死的几率
    64位win7安装ubunto最新14.04的过程,及出现的问题的解决
    一次非线上iowait高的情况的检查
    一个愚蠢的python逻辑语法错误
    Bellman-Ford算法解决单源最短路问题
    Floyd算法解决多源最短路径问题
    最短路问题Dijkstra算法
    最小生成树之Kruskal算法
    最优二叉搜索树
  • 原文地址:https://www.cnblogs.com/programmingAdorableNew/p/10198064.html
Copyright © 2011-2022 走看看