【python】py课上机作业2「随机生成圆内点」「两数之和」

1. 随机生成圆内点

请写一个程序模拟:
1、随机生成n=100个单位圆(x** 2+y**2=1)内的点;
提示:可用元组表示一个点:(.27, .78)
2、记任意两点之间的距离为dij,i!=j。
3、求所有dij的平均值。

思路:
首先先写一个函数来产生随机的点,因为是要在一个圆内,所以我们的x,y坐标中的一个可以直接用随机数来进行生成(0,1)之间的数,而另一个坐标可以使用random库中的uniform方法来产生一个在们指定范围内的小数,即**(0, 1 - math.sqrt(x ** 2))**范围内.

然后是求两点之间的距离,数学表达式是平方下两点x坐标的差的平方加上两点y坐标的差,我们将以元组为形式的坐标作为参数传入getDistance函数中,然后通过列表的[0]和[1]来访问x,y.

将不同点的距离保存下来,最后进行相加,将总和除以个数等于平均值。

代码区:

import math
import random


def getPoints():
    x = random.random()
    y = random.uniform(0, 1 - math.sqrt(x ** 2))# 在区间内产生随机小数
    return x, y


def getDistance(point1, point2):
    distance = math.sqrt((point1[0] - point2[0]) ** 2 + (point1[1] - point2[1]) ** 2)
    return distance


n = 100
points = []
dis = [[0 for _ in range(100)] for _ in range(100)]# 定义二维列表
sum = 0
cnt = 0
for _ in range(n):
    points.append(getPoints())# 产生多个点存入points列表中
for i in range(n):
    for j in range(n):
        if i != j:
            dis[i][j] = getDistance(points[i], points[j])
            sum += dis[i][j]
            cnt += 1
print("*********", sum / cnt, "***********")

2. 两数之和

题是leetcode上的原题,所以我们直接用leetcode上的题目描述:
给定一个整数数组 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 <= 10 ** 4
-10 ** 9 <= nums[i] <= 10 ** 9
-10 ** 9 <= target <= 10 ** 9
只会存在一个有效答案
进阶:你可以想出一个时间复杂度小于 O(n2) 的算法吗?

思路:
当然可以选择暴力两个for循环遍历过去,但是时间太久,所以使用哈希表来做,会快很多。
每次进行判断,如果哈希表中有值可以和自己相加等于target就返回,要不然就把自己存入哈希表中,方便下一次判断。

代码区:(只使用一次for循环)

class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        hashmap = {
    
    }# 新建哈希表
        for index, num in enumerate(nums):# enumerate方法取出下标和值
            if hashmap.get(target - num) is not None:# 如果存在的话就返回
                return [hashmap.get(target - num), index]
            hashmap[num] = index# 将不存在的存入哈希表中,便于下次判断

新手上路,有错请指正;

猜你喜欢

转载自blog.csdn.net/qq_33884853/article/details/124530281