Two Sum - 新手上路
2019-02-17 01:51:36来源:博客园 阅读 ()
不是计算机相关专业毕业的,从来没用过leetcode,最近在学习数据结构和算法,用leetcode练练手。
新手上路,代码如有不妥之处,尽管指出来。
今天抽空做的第一个题:Two Sum(最简单的呃呃呃)
题目如下:
解决思路:
现有数组nums[p-r],首先将nums从小至大排序,然后将nums[p] + nums[r]与指定值k比较,如果nums[p] + nums[r] > k则说明nums[r]大了,r--;
反之p++,直到nums[p] + nums[r] = k。
以下是我的Java实现(老实说,时间复杂度较高)
1 class Solution { 2 public int[] twoSum(int[] nums, int target) { 3 int[] copyNums = new int[nums.length]; 4 for(int i = 0; i < nums.length; ++i){ 5 copyNums[i] = nums[i]; 6 } 7 int[] result = new int[2]; 8 9 // 先排序 10 quickSort(nums, 0, nums.length - 1); 11 12 // 将两个元素之和与target相比较 13 int[] temp = compare(nums, 0, nums.length - 1, target); 14 15 boolean flagA = false; 16 boolean flagB = false; 17 for(int i = 0; i < copyNums.length; ++i){ 18 if(temp[0] == copyNums[i] && !flagA){ 19 result[0] = i; 20 flagA = true; 21 continue; 22 } 23 if(temp[1] == copyNums[i] && !flagB){ 24 result[1] = i; 25 flagB = true; 26 } 27 } 28 return result; 29 } 30 31 private int[] compare(int[] nums, int p, int r, int target){ 32 while(p < r){ 33 int k = nums[p] + nums[r]; 34 if(k == target) 35 return new int[]{nums[p], nums[r]}; 36 if(k > target){ 37 r--; 38 }else{ 39 p++; 40 } 41 } 42 return null; 43 } 44 45 private void quickSort(int[] nums, int p, int r){ 46 if(p >= r) 47 return; 48 int q = partition(nums, p, r); 49 quickSort(nums, p, q-1); 50 quickSort(nums, q+1, r); 51 } 52 53 private int partition(int[] nums, int p, int r){ 54 // 最简单的,选择nums最后一个元素作为中间数 55 int k = nums[r]; 56 int i = p; 57 58 for(int j = p; j <= r; j++){ 59 if(nums[j] < k){ 60 int temp = nums[i]; 61 nums[i] = nums[j]; 62 nums[j] = temp; 63 ++i; 64 } 65 } 66 67 nums[r] = nums[i]; 68 nums[i] = k; 69 70 return i; 71 } 72 }
原文链接:https://www.cnblogs.com/alinainai/p/10386307.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:浅谈JavaWeb架构演变
- Codewars Solution:Two to One 2020-05-21
- 死磕Lambda表达式(六):Consumer、Predicate、Function复 2020-04-07
- 多线程笔记 - provider-consumer 2020-02-26
- 【rabbitmq】Queueingconsumer被废止后老代码如何做的解决方 2020-02-05
- CDN(Content Delivery Network)原理 2019-10-17
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash