0
点赞
收藏
分享

微信扫一扫

力扣Day20(除夕快乐)

f12b11374cba 2022-01-31 阅读 50

344、反转字符串

编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。

不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。

 

class Solution {
    public void reverseString(char[] s) {  
        //我是瞎子,以为要把字符数组里的字符都弄成小写
        int j=s.length-1;
        char temp;
        for(int i=0;i<s.length/2;i++){
            //数组交换元素
            temp=s[i];
            s[i]=s[j];
            s[j]=temp;
            j--;
        }
    }
}

349、两个数组的交集

给定两个数组 nums1 和 nums2 ,返回 它们的交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。

 // int[] arr = set.stream().mapToInt(Integer::intValue).toArray(); //set直接转成数组

// int[] arr = list.stream().mapToInt(Integer::intValue).toArray(); //list直接转成数组

class Solution {
    public int[] intersection(int[] nums1, int[] nums2) {
        Map<Integer,Integer>map=new HashMap<>();//不用map用list也可以
        Set<Integer>set=new HashSet<>();
        for(int i=0;i<nums1.length;i++){//获取nums1的值
            map.put(nums1[i],i);
        }

        for(int i:nums2){
            if(map.containsKey(i)){//判断map是否有nums的值
                set.add(i);//去重
            }
        }

// int[] arr = set.stream().mapToInt(Integer::intValue).toArray(); //set直接转成数组
// int[] arr = list.stream().mapToInt(Integer::intValue).toArray(); //list直接转成数组
        
        int []arr=new int[set.size()];
        int j=0;
        for(int i:set){
            arr[j++]=i;
        }
        return arr;
    }
}

355、两个数组的交集 II

给你两个整数数组 nums1 和 nums2 ,请你以数组形式返回两数组的交集。返回结果中每个元素出现的次数,应与元素在两个数组中都出现的次数一致(如果出现次数不一致,则考虑取较小值)。可以不考虑输出结果的顺序。

注意:

1、remove有两个重载方法,如果括号里的是int类型,那么就是返回索引对应的值,如果括号不是int类型,那么就是删除这个值。
2、恰巧我们的值是int类型的,直接返回i 会被默认为返回索引i对应的值而报错,所以我们要将int转化成Integer  

法一:

class Solution {
    public int[] intersect(int[] nums1, int[] nums2) {
       List<Integer>list1=new ArrayList<>();
       List<Integer>list2=new ArrayList<>();
       for(int i:nums1){
           list1.add(i);
       }

        for(int i:nums2){
            if(list1.contains(i)){
                list2.add(i);
                list1.remove(Integer.valueOf(i));
                //remove有两个重载方法,如果括号里的是int类型,那么就是返回索引对应的值
                //如果括号不是int类型,那么就是删除这个值。
                //恰巧我们的值是int类型的,直接返回i 会被默认为返回索引i对应的值而报错,                
                //所以我们要将int i转化成Integer 
            }
        }

       int[]arr=new int[list2.size()];
       int j=0;
       for(int i:list2){
           arr[j++]=i;
       }
       return arr;
    }
}

法二:

class Solution {
    public int[] intersect(int[] nums1, int[] nums2) {
      Map<Integer, Integer> map = new HashMap<>();
        // 将 nums1 出现的数值及频次放入映射中
        for (int num : nums1) {
            Integer count = map.get(num);
            if (count == null) {
                map.put(num, 1);
            } else {
                map.put(num, ++count);
            }
        }
        List<Integer> list = new ArrayList<>();
        for (int num : nums2) {
            // 获取映射中该数值出现的频次
            Integer count = map.get(num);
            if (count != null && count != 0) {
                list.add(num);
                // 注意每次匹配后,该数值的频次需要减 1(nums1 和 nums2 匹配的数值的频次要相同)
                map.put(num, --count);
            }
        }
        int[] res = new int[list.size()];
        for (int i = 0; i < list.size(); i++) {
            res[i] = list.get(i);
        }
        return res;
    }
}

 注意:

Map 是一种键-值对(key-value)集合,Map 集合中的每一个元素都包含一个键对象和一个值对象。其中,键对象不允许重复,而值对象可以重复。

如果Map的key重复了,那么会取最后一次添加这个重复的key为准。

如图:添加了4个键为1的元素,因为键重复了,所以会取最后一次为键为1的元素即:<1,3>

System.out.println(map.remove(2,5));//判断map集合中是否有一个元素满足<键=2,值=5>的。满足则返回true并删除这个元素

举报

相关推荐

day20

day20 数组指针

Java学习-Day20

SQL注入-Day20

算法打卡day20

渗透学习日记day20

0 条评论