我是靠谱客的博主 无奈小伙,最近开发中收集的这篇文章主要介绍leetcode刷题记录及总结第一次提交的答案第一次提交的代码2022年3月17日学习产出:,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

今日刷题:
LeetCode 217
在这里插入图片描述

第一次提交的答案

题目:给你一个整数数组 nums 。如果任一值在数组中出现 至少两次 ,返回 true ;如果数组中每个元素互不相同,返回 false 。

class Solution {
    public boolean containsDuplicate(int[] nums) {
        //思路,每个数字都和剩下的数字比较,遍历一遍
        if(nums.length==1) return false;
        int value = 0;
        for(int i=0;i<nums.length-1;i++){//只需要遍历到倒数第二个即可
            for(int j=i+1;j<nums.length;j++){
                if(nums[i]==nums[j]) {return true;
                }
            }
        }
    return false;
}
}

力扣:21 合并两个有序链表
在这里插入图片描述

第一次提交的代码

class Solution {
    public ListNode mergeTwoLists(ListNode list1, ListNode list2) {
//思路:循环+双指针
//当链表1的值大于等于链表2的值时,链表1的指针不动,链表2的指针给新的链表,同时链表2的指针往下移动一位
//当链表1的指针指向空时,将链表2的指针赋给结果链表
        ListNode resultNode = new ListNode();//这是一个新链表
        ListNode head = resultNode;//获取到他的头结点
        while(list1!=null&&list2!=null){
        if(list1.val>=list2.val){
            head.next=list2;//这个表示head结点变成了list2的结点
            list2=list2.next;
            }
        else{
            head.next=list1;
            list1=list1.next;
        }
        head=head.next;//获取到data域的值
        }
        if(list1==null) {head.next=list2;}
        if(list2==null) {head.next=list1;}
    return resultNode.next;
    }
}

2022年3月17日

力扣刷题 :数组,力扣第一题和第88题

题号:88,合并两个有序数组
内容:给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。
请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。
注意:最终,合并后数组不应由函数返回,而是存储在数组 nums1 中。为了应对这种情况,nums1 的初始长度为 m + n,其中前 m 个元素表示应合并的元素,后 n 个元素为 0 ,应忽略。nums2 的长度为 n 。
在这里插入图片描述
第一次提交的代码:

class Solution {
    public void merge(int[] nums1, int m, int[] nums2, int n) {
/*使用jdk中Arrays类提供的sort方法中缺陷是浪费了题目提供好的
已经有序的条件
解法思路2:循环+双指针,数组中我们的指针就是索引
for循环
判断数组1中的值是否大于数组二中的值
如果数组1的值大于数组2的值则,数组2的值赋予新的数组中,
同时数组2的指针下移一位

*/
int[] result = new int[m+n];
int all = m+n;
int index1=0;
int index2=0;
for(int i=0;i<all;i++){
    if(index1>=m){//数组1的取完,接下来取数组2的
        result[i]=nums2[index2++];
    }else if(index2>=n){
        result[i]=nums1[index1++];
    }else{
        if(nums1[index1]>=nums2[index2]){
            result[i]=nums2[index2++];
        }else{
            result[i]=nums1[index1++];
        }
    }
    }

for(int j=0;j<all;j++) {nums1[j]=result[j];}
}
}

心得体会:

  1. if判断和for循环结合在一起使用时,注意if条件的判断顺序,注意数组指针和for循环里的指针里的表示的不一样,我们这里用到了三个指针,但是之前得第一遍代码的时候,if条件中只用了result中的指针来判断,这是不合理的。
  2. 注意正向写判断很复杂的时候不如反过来写他的异或条件

题号:1 两数之和
内容:给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。
你可以按任意顺序返回答案。

class Solution {
    public int[] twoSum(int[] nums, int target) {
思路:建立一个哈希表,将扫描过得数组放入哈希表中,
新建一个哈希表,用于存放扫描过得数组,key为数组的值,value为下标
新建一个数组,用于存放得到的数组下标
对扫描的每一个数组进行判断,如果符合要求则返回该值得下标
若不符合则添加进哈希表中
Map<Integer,Integer> storeNums = new HashMap<>(nums.length,1);
int[] result = new int[2];
// int another=0;
for(int i=0;i<nums.length;i++){
    int another = target - nums[i];
    Integer anotherIndex = storeNums.get(another);
    if(anotherIndex!=null){
        result[0] = anotherIndex;
        result[1] = i;
        break;
        }else{
            storeNums.put(nums[i],i);
        }
    }
    return result;
}
}

心得体会

  1. 哈希表就是普通的key-value形式
  2. 创建哈希表的时候我们需要声明key和value的变量类型,在java中声明新的变量一定要写new
  3. get()方法 获取制定key对应的value
  4. put()方法 将键值对添加到哈希表中
  5. break可以使用在,我们一旦获取到我们所需要的结果是 退出循环!

学习产出:

  1. 注意边界条件
  2. 至少出现两次的话,需要注意fro循环的边界条件
  3. 单链表中每个结点都有data域和next域,只有满足这两个域都有值,才是一个完整的结点。
  4. 当使用双指针的时候,注意判断条件。
  5. 数组也可以使用指针来解决问题,指针就是他的索引。

最后

以上就是无奈小伙为你收集整理的leetcode刷题记录及总结第一次提交的答案第一次提交的代码2022年3月17日学习产出:的全部内容,希望文章能够帮你解决leetcode刷题记录及总结第一次提交的答案第一次提交的代码2022年3月17日学习产出:所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(36)

评论列表共有 0 条评论

立即
投稿
返回
顶部