当前位置: 首页 > news >正文

免费发布信息网站凉山建设网站

免费发布信息网站,凉山建设网站,做电影网站需要什么条件,wordpress 导入用户为找工作#xff0c;我的代码都是用的JAVA#xff0c;慢慢学习中。 LeetCode刷题Day1 两数之和 给定一个整数数组 nums 和一个整数目标值 target#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数#xff0c;并返回它们的数组下标。 你可以假设每种输入…为找工作我的代码都是用的JAVA慢慢学习中。 LeetCode刷题Day1 两数之和 给定一个整数数组 nums 和一个整数目标值 target请你在该数组中找出 和为目标值 target 的那 两个 整数并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是数组中同一个元素在答案里不能重复出现。 你可以按任意顺序返回答案。 示例 1 输入nums [2,7,11,15], target 9 输出[0,1] 解释因为 nums[0] nums[1] 9 返回 [0, 1] 。示例 2 输入nums [3,2,4], target 6 输出[1,2]示例 3 输入nums [3,3], target 6 输出[0,1]提示 2 nums.length 104-109 nums[i] 109-109 target 109只会存在一个有效答案 **进阶**你可以想出一个时间复杂度小于 O(n2) 的算法吗 解题方法 1.暴力求解 枚举在数组中所有的不同的两个下标的组合逐个检查它们所对应的数的和是否等于target 复杂度分析 时间复杂度: O ( n 2 ) O(n^2) O(n2)这里n为数组的长度。 空间复杂度: O ( 1 ) O(1) O(1)只用到常数个临时变量。 class Solution {public int[] twoSum(int[] nums, int target) {int len nums.length;for(int i0;ilen-1;i){for(int ji1;jlen;j){if(nums[i]nums[j]target){return new int[]{i,j};}}}throw new IllegalArgumentException(No two sum solution);//不写不能通过}public static void main(String[ ] args){int[] arrayName {2,7,11,15};Solution s new Solution();int[] indexss.twoSum(arrayName,9);for (int i 0; i indexs.length; i) {System.out.print(indexs[i] );}} }我自己想到的也是这个暴力破解因为其他不熟练但是第一个for循环我原本写的是(ilen)听了官方视频讲解说是每种输入只会对应一个答案所以和内循环区分一下。 这里要说下java中数组的定义 new int[]{1,2,3}int[] nums new int[5]; nums[0]1;int[] nums Array.create(1, 2, 3, 4, 5);//使用Array类的静态方法创建和初始化数组:int[] source {1, 2, 3, 4, 5};//使用Arrays类的静态方法复制、排序等操作数组: int[] target Arrays.copyOf(source, source.length); // 复制数组 Arrays.sort(target); // 对目标数组进行排序 对于代码中抛出的异常要加上这句是因为如果数组nums中不存在符合条件的两个数就不会有返回值而函数定义的时候定义的返回类型是int[]会报错所以需要抛出异常。 再看看这个异常IllegalArgumentException是非法参数异常当传递给方法的参数不满足预期时比如传入了无效的参数或空值容易引发此异常如果找不到符合条件的两个数就抛出这个非法参数异常错误信息是“No two sum solution”。 2.查找表法 在遍历的同时记录一些信息以省去一层循环这是“以空间换时间的想法 需要记录已经遍历过的数值和它所对应的下标可以借助查找表实现 查找表有两个常用的实现: 哈希表 平衡二叉搜索树 复杂度分析 时间复杂度:O(n)这里n为数组的长度。空间复杂度:O(n)哈希表里最多需要存n-1个键值对。 class Solution1 {public int[] twoSum(int[] nums, int target){int len nums.length;MapInteger,Integer hashMap new HashMap(len-1);hashMap.put(nums[0], 0);//这一行也可以不加因为下面的for循环也会加入的for (int i 0; i len; i) {int another target-nums[i];if (hashMap.containsKey(another)){return new int[]{i,hashMap.get(another)};}hashMap.put(nums[i],i);}throw new IllegalArgumentException(No two sum solution);} }图片和代码来自leetcode官网 思路定义一个Map存放键值对默认将nums[0]添加进去Map这里用put添加元素官方给出的代码这边初始化了一下但在for循环中nums[0]又被加了一下。 public static void main(String[] args) {MapInteger,Integer hashMap new HashMap(5);hashMap.put(0,1);hashMap.put(0,1);for (Map.EntryInteger, Integer entry : hashMap.entrySet()) {System.out.println(Key: entry.getKey() , Value: entry.getValue());}//Key: 0, Value: 1}我不太了解这个结构就敲代码试了一下同样的值加两次Map他实际第2次会覆盖第1次应当是按键来存值的一个键只能一个值。 这里给hashMap赋初值大概是出于一个程序员的谨慎就和写文件动不动就ctrlS一样hhh。 接着开始遍历对于nums[0]也就是6他需要找到一个值为2的当前Map中没有2没有就将他存入Map中对于nums[1]也就是3他需要找到一个值为5的当前Map中没有5,没有就将他存入Map中;对于nums[2]也就是8他需要找到一个值为0的当前Map中没有0,没有就将他存入Map中;对于nums[3]也就是2他需要找到一个值为6的当前Map中有6,找到了因为题目中说每种输入只会对应一个答案找到了就返回new int[]{i,hashMap.get(another)}。 再思考一下为什么要将数组的下标和值将值变为map中的键下标变为map中的值大概是因为这样好操作可以根据值得到我们要的下标。脑子不够用需要理一下思路。 如有错误请指正
http://www.pierceye.com/news/232108/

相关文章:

  • 网站建设中html网页软件开发定制外包服务商
  • 山东seo网站推广河南定制网站建设企业
  • 网站建设文献文档单产品网站建设
  • 唐山网站建设自主开发宁波北仑做公司网站
  • 廊坊网页模板建站专业网站建设公司排名
  • 广州本地生活appseo百度百科
  • 成都产品网站建设镜像网站是怎么做的
  • 网站建设需求分析范例中国建设信息网站
  • 提供网站建设工具的品牌如何自己开个网站平台
  • 站长工具seo综合查询怎么去掉百家号查询排名数据查询
  • 网站怎么做商家定位注册网站不用手机短信验证的网站
  • 郑州医疗网站建设线下推广团队
  • 合肥网站推广 公司哪家好阿里云注销网站
  • 手机网站调用分享网站用户体验存在问题
  • 淘宝网官方网站路飞和女帝做h的网站
  • app网站设计制作360网站 备案
  • 网站建设多久能学会内丘网站建设案例
  • 网站设计要素 优帮云卖东西专业网站网上
  • 做古风人物小图的网站或软件东莞附近的网络推手公司
  • 东莞专业的单位网站建设江苏网站建设定制
  • 宁夏建设工程造价站网站东营网站seo外包
  • 推销网站建设今天重大新闻文字
  • 网站上线过程网站开发系统需求说明书
  • it外包行业江门seo网络推广
  • 深圳石岩建网站判断网站模板版本
  • 梅州市住房和城乡建设局网站东营网站
  • 免费手机端网站模板下载工具windows怎么做网站
  • 新乡网站自然优化本地电脑如何做网站服务器
  • 网站备案是域名备案还是服务器备案辽宁天一建设有限责任公司网站
  • 做网站的软件是什么阿里云官网入口