diff --git a/Archer/readme.md b/Archer/readme.md new file mode 100644 index 0000000..bb0ace8 --- /dev/null +++ b/Archer/readme.md @@ -0,0 +1,5 @@ +# Archer贡献内容 + + + +双数之和的一个查找,只实现了最简单的方式,但是,哈希表的解决方案还未完善,没有解决哈希冲突。 \ No newline at end of file diff --git a/Archer/twoSum/twoSum.py b/Archer/twoSum/twoSum.py new file mode 100644 index 0000000..986fa9c --- /dev/null +++ b/Archer/twoSum/twoSum.py @@ -0,0 +1,58 @@ +#!/usr/bin/env python +# -*- coding:utf-8 -*- + +def twoSum(nums, target): + """ + :type nums: List[int] + :type target: int + :rtype: List[int] + """ + + # 解法1,将数组中所有元素依次相加,计算量o((n^2)/2) + ''' + k = len(nums) + + for i in range(0,k-1): + for j in range(i+1,k): + if nums[i] + nums[j] == target: + return [i,j] + ''' + # 解法2,用目标和target去减数组中的元素,然后再把另一个加法项找出来,计算量o((n^2)/2), + ''' + k = len(nums) + + for i in range(0,k-1): + temp = target - nums[i] + for j in range(i+1,k): + if temp == nums[j]: + return [i, j] + ''' + + # 解法3,用哈希表,空间换时间,第一次循环将数组的值放入哈希表中,第二次循环从哈希表中取出值(待完善) + + map_a = dict() + + k = len(nums) + for i in range(0, k): + map_a[nums[i]] = (i,nums[i]) + + print map_a.items() + + for i in range(0, k): + temp = target - nums[i] + if temp in map_a and map_a[temp][0]!=i: + return [map_a[temp][0], i] + print "No two sum solution" + + # 解法4,用哈希表,一边把数组元素放到哈希表中,一边判断哈希表中是否有满足和的两个整数(待完善) + ''' + map_a = dict() + k = len(nums) + + for i in range(0, k): + map_a[nums[i]] = (i, nums[i]) + print map_a.items() + temp = target - nums[i] + if temp in map_a and map_a[temp][0]!=i: + return [map_a[temp][0], i] + ''' diff --git a/ParkFeng/diagonal_traverse/Learn_1.java b/ParkFeng/diagonal_traverse/Learn_1.java new file mode 100644 index 0000000..01e6132 --- /dev/null +++ b/ParkFeng/diagonal_traverse/Learn_1.java @@ -0,0 +1,35 @@ +class Solution { + public int[] findDiagonalOrder(int[][] matrix) { + if (matrix.length == 0) { + return new int[0]; + } + int m = matrix.length; + int n = matrix[0].length; + int[] result = new int[m * n]; + int r = 0; + int c = 0; + for (int i = 0; i < result.length; i++) { + result[i] = matrix[r][c]; + if ((r + c) % 2 == 0) { + if (c == n - 1) { + r++; + } else if (r == 0) { + c++; + } else { + r--; + c++; + } + } else { + if (r == m - 1) { + c++; + } else if (c == 0) { + r++; + } else { + r++; + c--; + } + } + } + return result; + } +} diff --git a/ParkFeng/diagonal_traverse/readme.md b/ParkFeng/diagonal_traverse/readme.md new file mode 100644 index 0000000..b3ef161 --- /dev/null +++ b/ParkFeng/diagonal_traverse/readme.md @@ -0,0 +1,33 @@ + +**对角线遍历** + +题目: + +给定一个含有 M x N 个元素的矩阵(M 行,N 列),请以对角线遍历的顺序返回这个矩阵中的所有元素,对角线遍历如下图所示: + +输入: +[ + [ 1, 2, 3 ], + [ 4, 5, 6 ], + [ 7, 8, 9 ] +] + +输出: [1,2,4,7,5,3,6,8,9] + +说明: +给定矩阵中的元素总数不会超过 100000 。 + +实现语言:java + +题目分析: + +1、M 和 N不确定是否相等,但是对以对角线遍历矩阵没有影响 +2、沿对角线的有序遍历 +3、输出结果要求是一个有序的数组 +4、附上手写手写分析 +5、learn_1实现的复杂度为: + 当M或者N任意一个为1时,算法复杂度为O(n); + 当M=N即该矩阵为一个N阶方阵时,算法复杂度为O(n^2); +6、learn_2的实现还有问题,后期补充 + + diff --git "a/ParkFeng/diagonal_traverse/345円257円271円350円247円222円347円272円277円351円201円215円345円216円206円345円210円206円346円236円220円350円215円211円345円233円276円.jpg" "b/ParkFeng/diagonal_traverse/345円257円271円350円247円222円347円272円277円351円201円215円345円216円206円345円210円206円346円236円220円350円215円211円345円233円276円.jpg" new file mode 100644 index 0000000..2902863 Binary files /dev/null and "b/ParkFeng/diagonal_traverse/345円257円271円350円247円222円347円272円277円351円201円215円345円216円206円345円210円206円346円236円220円350円215円211円345円233円276円.jpg" differ diff --git a/ParkFeng/readme.md b/ParkFeng/readme.md new file mode 100644 index 0000000..48ff99f --- /dev/null +++ b/ParkFeng/readme.md @@ -0,0 +1,5 @@ +# ParkFeng贡献内容 + + + +1.对角线遍历分析 \ No newline at end of file diff --git a/SugarChl/readme.md b/SugarChl/readme.md new file mode 100644 index 0000000..ba27de3 --- /dev/null +++ b/SugarChl/readme.md @@ -0,0 +1,10 @@ +# SugarChi贡献内容 + + + +寻找旋转排序数组中的最小值 + +153. 寻找旋转排序数组中的最小值_1.c 是完全自己写的代码 + +153. 寻找旋转排序数组中的最小值_2.c 是网络上找到的代码 + diff --git "a/SugarChl/xuanzhuanSort/153. 345円257円273円346円211円276円346円227円213円350円275円254円346円216円222円345円272円217円346円225円260円347円273円204円344円270円255円347円232円204円346円234円200円345円260円217円345円200円274円_1.c" "b/SugarChl/xuanzhuanSort/153. 345円257円273円346円211円276円346円227円213円350円275円254円346円216円222円345円272円217円346円225円260円347円273円204円344円270円255円347円232円204円346円234円200円345円260円217円345円200円274円_1.c" new file mode 100644 index 0000000..0945e3d --- /dev/null +++ "b/SugarChl/xuanzhuanSort/153. 345円257円273円346円211円276円346円227円213円350円275円254円346円216円222円345円272円217円346円225円260円347円273円204円344円270円255円347円232円204円346円234円200円345円260円217円345円200円274円_1.c" @@ -0,0 +1,29 @@ +int findMin(int* nums, int numsSize) { + int L=0; + int R=numsSize-1; + int mid; + if(numsSize==1) + return nums[0]; + if(numsSize==2) + if(nums[0]nums[L]&&nums[mid]>nums[R]) + L=mid; + else if(nums[mid]nums[L+1]&&nums[L]>nums[L-1]) + return nums[L+1]; + } + return nums[mid]; +} \ No newline at end of file diff --git "a/SugarChl/xuanzhuanSort/153. 345円257円273円346円211円276円346円227円213円350円275円254円346円216円222円345円272円217円346円225円260円347円273円204円344円270円255円347円232円204円346円234円200円345円260円217円345円200円274円_2.c" "b/SugarChl/xuanzhuanSort/153. 345円257円273円346円211円276円346円227円213円350円275円254円346円216円222円345円272円217円346円225円260円347円273円204円344円270円255円347円232円204円346円234円200円345円260円217円345円200円274円_2.c" new file mode 100644 index 0000000..8ffcc4a --- /dev/null +++ "b/SugarChl/xuanzhuanSort/153. 345円257円273円346円211円276円346円227円213円350円275円254円346円216円222円345円272円217円346円225円260円347円273円204円344円270円255円347円232円204円346円234円200円345円260円217円345円200円274円_2.c" @@ -0,0 +1,14 @@ +int findMin(int* nums, int numsSize) { + int L=0; + int R=numsSize-1; + int mid; + while(Lnums[R]) + L=mid+1; + else if(nums[mid] 4 -> 3) + (5 -> 6 -> 4) +输出:7 -> 0 -> 8 +原因:342 + 465 = 807 +""" +# Definition for singly-linked list. +# class ListNode: +# def __init__(self, x): +# self.val = x +# self.next = None + +class Solution(object): + def addTwoNumbers(self, l1, l2): + pNode = ListNode(0) + pHead = pNode + val = 0 + while l1 or l2 or val: + if l1: + val += l1.val + l1 = l1.next + if l2: + val += l2.val + l2 = l2.next + pNode.next = ListNode(val % 10) + val /= 10 + pNode = pNode.next + return pHead.next + +class Solution: + def addTwoNumbers(self, l1, l2): + """ + :type l1: ListNode + :type l2: ListNode + :rtype: ListNode + """ + node1 = l1 + node2 = l2 + dummyRoot = ListNode(0) + ptr = dummyRoot + carry = 0 + while node1 or node2: + ptr.next = ListNode((node1.val if node1 else 0) + (node2.val if node2 else 0) + carry) + ptr = ptr.next + carry = ptr.val //10 + ptr.val %= 10 + node1 = node1.next if node1 else None + node2 = node2.next if node2 else None + if carry: + ptr.next = ListNode(carry) + return dummyRoot.next + +class Solution: + def addTwoNumbers(self, l1, l2): + """ + :type l1: ListNode + :type l2: ListNode + :rtype: ListNode + """ + + sl1 = '' + sl2 = '' + + while l1: + sl1 += str(l1.val) + l1 = l1.next + + while l2: + sl2 += str(l2.val) + l2 = l2.next + + sum = str(int(sl1[::-1]) + int(sl2[::-1])) + + head = tail = ListNode(0) + + for cha in sum[::-1]: + cur = ListNode(cha) + tail.next = cur + tail = cur + + return head.next + + + diff --git a/codingling/addtwonumbers/README.md b/codingling/addtwonumbers/README.md new file mode 100644 index 0000000..ab6a3ca --- /dev/null +++ b/codingling/addtwonumbers/README.md @@ -0,0 +1,15 @@ +## 2.AddTwoNumbers两数相加(链表) + +### 题目描述 + +给定两个非空链表来表示两个非负整数。位数按照逆序方式存储,它们的每个节点只存储单个数字。将两数相加返回一个新的链表。 + +你可以假设除了数字 0 之外,这两个数字都不会以零开头。 + +示例: + +输入:(2 -> 4 -> 3) + (5 -> 6 -> 4) +输出:7 -> 0 -> 8 +原因:342 + 465 = 807 + +这里给出了三种解法 \ No newline at end of file diff --git a/readme.md b/readme.md index 821be1d..fa1d0bb 100644 --- a/readme.md +++ b/readme.md @@ -1,2 +1,14 @@ # 光城刷题最优群打卡贡献榜 + + +# 贡献内容 + +| 人员 | 贡献内容 | +| ---------- | ------------------------------------------------------------ | +| 光城 | [腾讯Leetcode刷题](https://github.com/Light-City/learning-algorithm/tree/master/%E5%85%89%E5%9F%8E) | +| SugarChl | [寻找旋转排序数组中的最小值](https://github.com/Light-City/learning-algorithm/tree/master/SugarChl) | +| Archer | [两数之和](https://github.com/Light-City/learning-algorithm/tree/master/Archer) | +| ParkFeng | [对角线遍历](https://github.com/Light-City/learning-algorithm/tree/master/ParkFeng) | +| codingling | [两数相加(链表)](https://github.com/Light-City/learning-algorithm/tree/master/codingling) | + diff --git "a/345円205円211円345円237円216円/readme.md" "b/345円205円211円345円237円216円/readme.md" new file mode 100644 index 0000000..e6e8d22 --- /dev/null +++ "b/345円205円211円345円237円216円/readme.md" @@ -0,0 +1,2 @@ +# 光城贡献内容 +

AltStyle によって変換されたページ (->オリジナル) /