日常-力扣刷题1

力扣题库第一题 两数之和

题目描述:
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 的那 两个 整数,并返回它们的数组下标。

你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。

你可以按任意顺序返回答案。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/two-sum

最先从脑袋里蹦出来的就是数组循环😂,最平庸的解法,后来看了看评论,又从利用hashmap的角度出发的,利用的键值对的key的唯一性。

class Solution {
    public int[] twoSum(int[] nums, int target) {
        int [] results = new int[2];
// 数组循环 while 双重循环 循环极限为(n^2-n)/2      
        // for(int i = 0; i < nums.length; i++){
        //     int j = i;
        //     while(j < nums.length){
        //         if(nums[i] + nums[j] == target){
        //             results[0] = i;
        //             results[1] = j;
        //             return results;
        //         }
        //         j++;
        //     }

// 数组循环 for
            // for(int j = nums.length-1; j > i; j--){
            //     if(nums[i] + nums[j] == target){
            //         results[0] = i;
            //         results[1] = j;
            //         return results;
            //     }
            // }
        // }

// 哈希表
        HashMap<Integer,Integer> hash = new HashMap<Integer,Integer>();
        for(int i = 0; i < nums.length; i++){
            if(hash.containsKey(nums[i])){
                results[0] = i;
                results[1] = hash.get(nums[i]);
                return results;
            }
            //将数据存入 key为补数,value为下标
            hash.put(target - nums[i], i);
        }
        return results;
    }
}

过程中对hashmap和hashtable的原理进行了下复习,有篇博客讲的很不错,任意门附上。
HashMap实现原理及源码分析

HashTable的主干就是数组,只不过数组元素的存储位置是由哈希函数计算所得,且这个函数的设计好坏会直接影响到哈希表的优劣;
HashMap的主干是Entry数组,简单来说,HashMap由数组+链表组成的,数组是HashMap的主体,链表则是主要为了解决哈希冲突而存在的。
文中涉及的为何HashMap的数组长度一定是2的次幂以及重写equals方法需同时重写hashCode方法,还未理解。

containsKey() 方法: 判断HashMap 中是否存在指定的 key 对应的映射关系返回 true,否则返回 false。

java中^ 异或运算符

按位异或运算符(^)是二元运算符,要化为二进制才能进行计算,在两个操作数中,如果两个相应的位相同,则运算结果为0,否则1;例如:
int a=15;
int b=a^8;
运算结果为:a=15;b=7;
a(二进制)=1111;8(二进制)=1000;1111^1000=0111;er 0111=7(十进制);
在两个布尔变量里if(boolean a ^ boolean b)就是 当a和b同真或同假时为真,不然为假。
文章转载至:https://www.cnblogs.com/FishCake/p/3298761.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值