算法数组

Posted danfengw

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法数组相关的知识,希望对你有一定的参考价值。

两数之和

1 两数相加=指定的数据,题目要求如下:
题目链接:

//给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 
//
// 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。 
//
// 
//
// 示例: 
//
// 给定 nums = [2, 7, 11, 15], target = 9
//
//因为 nums[0] + nums[1] = 2 + 7 = 9
//所以返回 [0, 1]
// 
// Related Topics 数组 哈希表 
// 👍 9889 👎 0

解决方案:
1 暴力解决方案:2层for循环
2 借助HashMap利用 target=nums[0] + nums[1]

 public int[] twoSum(int[] nums, int target) 
        HashMap<Integer, Integer> map = new HashMap<>();
        int[] index = new int[2];
        for (int i = 0; i < nums.length; i++) 
            map.put(nums[i], i);
        

        for (int i = 0; i < nums.length; i++) 
            int targetData = target - nums[i];
            if (map.containsKey(targetData) && map.get(targetData) != i) 
                index[0] = i;
                index[1] = map.get(targetData);
                break;
            
        
        return index;
    

年龄排序

针对剑指offer中P81提到的场景,假如需要对公司内部几万个员工的年龄进行排序,要求时间复杂度为O(n),空间复杂度为O(1)。

主要思想:计数排序和前面的基排序类似,都是基于桶排序思想。由于这里要求时间复杂度为O(n),低于基于比较的时间复杂度O(nlogn),所以前面7中排序算法均失效。又因为该场景中年龄属于一个比较小的范围,有大量的重复值,故可以考虑计数排序。实际做法是,新开一个长度为100的数组(假设年龄为0~99),数组下标表示年龄,数组存储该下标对应的年龄出现的个数,最后再根据数组的计数来排序。

 public static void ageSort(int[] ages, int num) 
        int oldestAge = 99;
        int[] bucket = new int[oldestAge + 1];

        // 初始化:将所有年龄的个数置0
        for (int i = 0; i < bucket.length; i++)
            bucket[i] = 0;

        // 遍历输入的年龄:并记录年龄个数
        for (int i = 0; i < num; i++) 
            if (ages[i]<0||ages[i]>oldestAge)
                return;
            
            bucket[ages[i]]+=1;
        
        
        // 对原数组重新赋值
        int index=0;
        for (int i=0;i<bucket.length;i++)
            int count=bucket[i];
            for (int j=0;j<count;j++)
                ages[index]=i;
                System.out.print("  "+ i);
                index++;
            
        
    

以上是关于算法数组的主要内容,如果未能解决你的问题,请参考以下文章

算法week4

校招必看攻略之-Java常见排序算法001之选择排序

判断一个坐标是否在多边形内部

算法数组

算法数组

算法review