之后按照顺序刷,先第一题

有人相爱,有人夜里开车看海,有人leetcode第一题都做不出来

3.14夜

第四周的web课让我拙劣的css水平暴露了…周一又是满课的一天,有点划水,但是大晚上写一道应该还行

图片.png

蛮力法

直接两个for循环

  1. class Solution {
  2. public int[] twoSum(int[] nums, int target) {
  3. for(int i=0;i<nums.length;i++){
  4. for(int j=i+1;j<nums.length;j++){
  5. if(nums[i]+nums[j]==target){
  6. return new int[]{i, j};
  7. }
  8. }
  9. }
  10. return new int[0];
  11. }
  12. }

呃呃呃呃两个我的问题:

呃呃呃呃两个我的问题:

失误1:i<nums.length&&j<nums.length这俩小于号用等号不行会越界,别傻

失误(?)2:力扣只需要填方法内容,方法外准备啥也要大概知道

失误3:return new int[0];这个忘了

事后:i的效率比i高。因为i++先赋值后运算,因此要多生成一个局部对象。

哈希表

我们创建一个哈希表,对于每一个 x,我们首先查询哈希表中是否存在 target - x,然后将 x 插入到哈希表中,即可保证不会让 x 和自己匹配。

  1. class Solution {
  2. public int[] twoSum(int[] nums, int target) {
  3. Map<Integer, Integer> hashtable = new HashMap<Integer, Integer>();
  4. for (int i = 0; i < nums.length; ++i) {
  5. if (hashtable.containsKey(target - nums[i])) {
  6. return new int[]{hashtable.get(target - nums[i]), i};
  7. }
  8. hashtable.put(nums[i], i);
  9. }
  10. return new int[0];
  11. }
  12. }