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

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

第一次提交的答案

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

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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 合并两个有序链表
在这里插入图片描述

第一次提交的代码

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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 。
在这里插入图片描述
第一次提交的代码:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
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 的那 两个 整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。
你可以按任意顺序返回答案。

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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刷题记录及总结第一次提交内容请搜索靠谱客的其他文章。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部