zoukankan      html  css  js  c++  java
  • 2020/6/24 面试题总结

    查找第一个非重复的字符,无得话返回-1,做的时候返回了字符数组的编号,太着急了,枯了。。。。。。。
    @Test
        public void searchfeichong(){
            // 查找第一个非重复的字符,无得话返回-1
            String str = "dawdhkadh";
            char[] sc = str.toCharArray();
            HashMap<Character,Integer> map = new HashMap<>();
            for (int i = 0; i < sc.length; i++) {
                if (map.containsKey(sc[i])){
                    map.put(sc[i],map.get(sc[i]) + 1);
                }else {
                    map.put(sc[i],1);
                }
            }
            for (int i = 0; i < sc.length; i++) {
                if (map.get(sc[i]) == 1){
                    System.out.println("非重复的第一个字符为:" + sc[i]);
                    return;
                }
            }
            System.out.println(-1);
        }
    

      最开始的时候出的题目

    给定一个无重复元素的数组candidates和一个目标函数target,找出candidates中所有可以使得数字和为target的组合。

    现在想想,不难,解法如下:

              快速排序,在一个有序的数组(从小到大)中最左边一定是最小值,最右边是最大值。我们可将最小值与最大值相加与目标值进行比较,如果两数之和大于目标值,我们就让最大值小一点(读取第二个最大值),如果两数之和小于目标值,我们就让最小值大一点(读取第二个最小值),如果两数之和刚好等于目标值,保存最大值,最小值,并且让最大值小一点,最小值大一点。需要注意的是前提条件是数组必须有序!!!

            简化:对nums先排序,然后定义两个指针,一个low = 0指向数组头,一个high = len(nums) - 1指向数组的尾,看其和nums[low]+nums[high]是否== target;若==,则查找成功返回;若>sum,则尾指针high--;若<sum,则头指针low++。

            时间复杂度:快排O(NlogN),查找O(N);所以总的时间复杂度为:O(NlogN)。

    # 快速排序思想
    def getRes_QuickSort(nums, target):
        nums = sorted(nums)
        len1 = len(nums)
        res = []
        if len1>= 2:
            low, high = 0, len1-1
            while low < high:
                if nums[low] + nums[high] == target:
                    res.append((nums[low], nums[high]))
                    low += 1
                    high -= 1
                elif nums[low] + nums[high] > target:
                    high -= 1
                else:
                    low += 1
            return res
    

      使用哈希表的思维去解:

        给定一个数,根据hash表查找另一个数只需要O(1)的时间。但需要空间换时间,空间复杂度为O(n);可以用hashMap实现,hashMap<a[i], 次数>。遍历一遍数组,若次数没有存在hashMap中,则将其加入,次数为1;再遍历一遍数组,对每个值nums[i],判断target - nums[i]是否在hashmap中【即对应的value是否==1】;若存在,则查找成功;否则继续遍历下一个。直到遍历完整个数组。

    # 哈希表思想
    def getRes_HashMap(nums, target):
        result = []
        for i, value in enumerate(nums):
            if (target - value) in nums[i+1:]:
                result.append((value, target - value))
        return result
    

      

  • 相关阅读:
    利用Mathematica计算伴随矩阵
    一个游戏
    华南理工大学2016年数学分析高等代数考研试题参考解答
    中山大学2016年数学分析高等代数考研试题参考解答及其讲解
    张祖锦第7卷第483期一个对数-平方根不等式
    为新生儿办理户口
    丘成桐大学生数学竞赛2014年分析与方程个人赛试题第一题另解
    家里蹲大学数学杂志第7卷第481期一道实分析题目参考解答
    顶级俄国数学家是怎样炼成的?[2016-06-25 张羿 赛先生]
    Calculations are rather interesting
  • 原文地址:https://www.cnblogs.com/lvpengbo/p/13189859.html
Copyright © 2011-2022 走看看